行为型设计模式之责任链模式

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了行为型设计模式之责任链模式相关的知识,希望对你有一定的参考价值。

参考技术A 为请求创建一个接受此次请求对象的链

行为型

为请求创建一个接受此次请求对象的链

J2EE中Servlet的Filter过滤器就是采用这用责任链模式,一个过滤器过滤完可以继续交给下一个过滤器继续别的过滤逻辑。最终交给Servlet处理。

设想这样一个场景,你的一个采购合同需要审批,根据金额大小,从主管、副董事长、董事长、董事会每一层级有不同的审批权限,对应审批金额(当然还可以有中间其他的层级经理、副经理等等),50万主任审批就OK了,100万需要更高级的责任人审批。

设计模式之责任链模式

1、责任链模式 chainOfResponsiblity :


    a、责任链模式属于行为型模式,行为型模式关注系统中对象之间的相互交互,研究系统在运行时对象之间的相互通信和协作,进一步明确对象的职责,共有11中模式。


    b、责任链模式的定义:

    将能够处理同一类请求的对象连成一条链,所提交的请求沿着链传递,链上的对象逐个判断是否有能力处理该请求,如果能则处理,如果不能则传递给链上的下一个对象。


    c、增加新的处理对象:

    由于责任链的创建完全在客户端中,因此新增新的具体处理者对原有类库没有任何影响,只需要添加新的类,然后在客户端中调用时添加即可,符合开闭原则。


2、简单的代码演示:


    a、下面五张图中,可以看到,Leader 抽象类中有一个 proctected 范围的 nextLeader 成员变量,并且提供一个 set 方法。 Director 类、Manager 类、GeneralManger 类都继承该抽象类。


技术分享


技术分享


技术分享


技术分享


     2、看看 Client13 测试类中输出的结果,以及示例代码类的主要类图关系。

技术分享

技术分享


3、责任链模式的常见的开发场景:


    -  Java 中,异常机制就是一种责任链模式。一个 try 可以对应多个 catch, 当第一个 catch 不匹配类型时,则自动跳到第二个 catch 中。

    -  Javascript 语言中,事件的冒泡和捕获机制。Java 语言中,事件的处理采用观察者模式。

    -  Servlet 开发中,过滤器的链式处理。

    -  Struts2 中,拦截器的调用也是典型的责任链模式

本文出自 “12392717” 博客,请务必保留此出处http://12402717.blog.51cto.com/12392717/1929225

以上是关于行为型设计模式之责任链模式的主要内容,如果未能解决你的问题,请参考以下文章

行为型模式:责任链模式

设计模式之责任链模式(行为型)

设计模式之责任链模式(行为型)

18行为型模式之责任链模式

行为型设计模式之责任链模式

设计模式之责任链模式