add design pattern chain of responsibility