一、职责链模式
使对个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系.将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。
客户端发出的请求时,并不知道哪一个对象最终处理这个请求,请求只是沿链传递,直至有一个对象负责处理它,且链中的对象自己也并不知道链的结构。这样系统的更改可以在不影响客户端的情况下动态的重新组织和分配责任,简化了对象的相互连接,他们仅需保持一个指向其后继者的引用,而不需保持它所有的候选接受者的引用,这样就降低了耦合度。
链的所在
我在理解这个模式时,觉得它之所以叫做职责链,最关键的是“链”这个字眼。从结构上来看,看下面的类图,没有什么特殊,一个个Handler类,几个concreteHandler来继承,并实现其功能。那么这个链体现在哪了呢?
在Handler 类中的SetSuccessor 方法。这个方法是用来设定后继者的。就是通过这个方法,一个个对象被连在一起。
客户发出一个请求,我们只需要给出处理请求链的开始端口,首个对象调用自己的HandRequest方法,解决了就结束请求,解决不了的请求,通过设定后继者后传,直到请求被解决。请求就这样被传递了,这些都是自动发生的。
有个比喻不知道恰当不?老师不知道拿错了谁的书,随便找了这个班一个人,把书给他负责把书还给书主人,这个同学,到班里,把书按座位传递,传到书主人那,就停止传递。按座位传递就是我们设定的职责链,每个同学就是一个个对象,书主人是最终处理请求的人。
二、类图
问题:从ConcreteHandler到Handler为什么是聚合关系?