1.简介
1)模式概述:使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递该请求,知道有一个对象处理它位置。
2)核心:
2.UML与代码实现
1)结构:UML
模式组成:
抽象处理者角色(Handler:Approver):定义一个处理请求的接口,和一个后继连接(可选)
具体处理者角色(ConcreteHandler:President):处理它所负责的请求,可以访问后继者,如果可以处理请求则处理,否则将该请求转给他的后继者。
客户类(Client):向一个链上的具体处理者ConcreteHandler对象提交请求。
2)vb.net代码(VS出现问题了,等重新安装后,会发上来代码,请稍等)
public class Bridge{ //客户端实现 public static void main(String[]args) { Abstraction ab = new RefinedAbstraction(); ab.SetImplementor(new ConcreteImplementorA()); ab.Operation(); ab.SetImplementor(new ConcreteImplementorB()); ab.Operation(); } } //Implementor类 abstract class Implementor { public abstract void Operation(); } //ConcreteImplementorA和ConcreteImplementorB等派生类 class ConcreteImplementorA extends Implementor { public void Operation() { System.out.println("具体实现A的方法执行"); } } class ConcreteImplementorB extends Implementor { public void Operation() { System.out.println("具体实现B的方法执行"); } } //Abstraction类 class Abstraction { protected Implementor implementor; public void SetImplementor(Implementor implementor) { this.implementor=implementor; } public void Operation() { implementor.Operation(); } } //RefinedAbstraction类 class RefinedAbstraction extends Abstraction { public void Operation() { implementor.Operation(); } }
3.优点
1 ) 降低耦合度 :该模式使得一个对象无需知道是其他哪一个对象处理其请求。对象仅需知道该请求会被“正确”地处理。接收者和发送者都没有对方的明确的信息,且链中的对象不需知道链的结构。
2) 职责链可简化对象的相互连接: 结果是,职责链可简化对象的相互连接。它们仅需保持一个指向其后继者的引用,而不需保持它所有的候选接受者的引用。
3) 增强了给对象指派职责( R es p o n s i b i l i t y )的灵活性 :当在对象中分派职责时,职责链给你更多的灵活性。你可以通过在运行时刻对该链进行动态的增加或修改来增加或改变处理一个请求的那些职责。你可以将这种机制与静态的特例化处理对象的继承机制结合起来使用。
4)增加新的请求处理类很方便
4.应用
1)有多个的对象可以处理一个请求,哪个对象处理该请求运行时刻自动确定。
2)你想在不明确指定接收者的情况下,向多个对象中的一个提交一个请求。
3)可动态指定一组对象处理请求。
5.其它相关模式
职责链模式常与组合模式一起使用,但是我在做系统的时候还没有尝试过
小结
职责链模式的主要优点在于可以降低系统的耦合度,简化对象的相互连接,同时增强给对象指派职责的灵活性,增加新的请求处理类也很方便;其主要缺点在于不能保证请求一定被接收,且对于比较长的职责链,请求的处理可能涉及到多个处理对象,系统性能将受到一定影响,而且在进行代码调试时不太方便。