责任链模式
定义:使多个对象都有处理机会处理请求,避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着该链传递该请求,直到有一个对象处理该请求为止。
两个角色:1、处理者:是一个接口,负责规定处理者处理用户的请求的方法以及具体处理者设置后继对象的方法
2、具体处理者:是实现处理者接口的类的实例,如果发现能处理用户的请求,就处理有关数据,否则就反馈无法处理的信息给用户,然后将用户的请求传递给自己的后继对象 。
主要解决:职责链上的处理者负责处理请求,客户只需要将请求发送到职责链上即可,无须关心请求的处理细节和请求的传递。
Handler里面聚合它自己,在HandlerRequest里判断是否合适,如果没有达到条件则向下传递,一直到有人处理这个事情。
优点:1、降低耦合度。将请求的发送者和接收者耦合
2、简化了对象。对象不需要知道链的结构
3、可以通过改变链内的成员或者调动它们的次序,允许动态地新增或者删除责任
4、增加新的请求处理类很方便
缺点:1、不能保证一定被接收
2、在进行代码调试时,可能会造成循环调用
使用场景:1、有多个对象处理同一个请求,具体哪个对象处理该请求由运行时确定
2、在不明确指定接收者的情况下,向多个对象中的一个提交一个请求
3、可动态指定一组对象处理请求。
如果一个对象不能处理该请求,则会让下一个对象处理,依次类推