设计模式(十三)----- 责任链模式(Chain of Responsibility)----(JAVA版)
来源:互联网 发布:leetcode题解 java版 编辑:程序博客网 时间:2024/06/09 22:44
责任链模式
使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。
这一模式的想法是,给多个对象处理一个请求的机会,从而解藕发送者和接受者
适用性
1) 有多个的对象可以处理一个请求,哪个对象处理该请求运行时刻自动确定。
2) 你想在不明确指定接收者的情况下,向多个对象中的一个提交一个请求。
3) 可处理一个请求的对象集合应被动态指定。
参与者
1.Handler
定义出一个处理请求的接口;如果需要,接口可以定义出一个方法,以返回对下家的引用。
2.ConcreteHandler
处理它所负责的请求,可以访问它的后继者,可以选择将请求处理掉,或者将请 求传给下家
3.Client
向链上的具体处理者(ConcreteHandler)对象提交请求
类图
一个小例子
1.Handler
public interface RequestHandle{ void handleRequest(Request request );}
2.ConcreteHandler
public class HRRequestHandle implements RequestHandle{ public void handleRequest(Request request){ if(request instanceof DimissionRequest){ System.out.println("要离职,人事审批"); } System.out.println("请求完成"); }}
public class PMRequestHandle implements RequestHandle{ RequestHandle rh; public PMRequestHandle(RequestHandle rh){ this.rh = rh; } public void handleRequest(Request request){ if(request instanceof AddMoneyRequest){ System.out.println("要加薪,项目经理审批"); }else{ rh.handleRequest(request); } }}
public class TLRequestHandle implements RequestHandle{ RequestHandle rh; public TLRequestHandle(RequestHandle rh){ this.rh = rh; } public void handleRequest(Request request){ if(request instanceof LeaveRequest){ System.out.println("要请假,项目组长审批"); }else{ rh.handleRequest(request); } }}
3.Client
public class Test{ public static void main(String[] args){ RequestHandle hr = new HRRequestHandle(); RequestHandle pm = new PMRequestHandle(hr); RequestHandle tl = new TLRequestHandle(pm); //team leader 处理离职请求 Request request = new DimissionRequest(); tl.handleRequest(request); System.out.println("================="); //team leader 处理加薪请求 request = new AddMoneyRequest(); tl.handleRequest(request); System.out.println("================="); //项目经理处理辞职请求 request = new DimissionRequest(); pm.handleRequest(request); }}
4.Result
要离职,人事审批
请求完成
=================
要加薪,项目经理审批
=================
要离职,人事审批
请求完成
参考资料
1.http://blog.csdn.net/lizl/article/details/435227
- 设计模式(十三)----- 责任链模式(Chain of Responsibility)----(JAVA版)
- JAVA设计模式—责任链模式(Chain Of Responsibility)
- Java设计模式----责任链模式(Chain of Responsibility)
- Java设计模式--责任链模式(Chain of Responsibility)
- Java设计模式--责任链模式【Chain of Responsibility Pattern】
- 【Java设计模式】(3)责任链Chain of Responsibility
- java设计模式--责任链 Chain of Responsibility
- Java责任链模式(Chain of Responsibility)
- 责任链模式(Chain of Responsibility) Java
- (三)二十三中设计模式之我见-------------责任链模式(Chain of Responsibility)
- 设计模式 - Chain of Responsibility Pattern(责任链模式)
- 设计模式 - Chain of Responsibility Pattern(责任链模式)
- 设计模式之责任链Chain of Responsibility模式
- 设计模式:责任链模式(Chain of Responsibility, CoR)
- 设计模式——责任链模式(Chain Of Responsibility)
- 设计模式初探-责任链模式(CHAIN OF RESPONSIBILITY)
- 设计模式之责任链模式(Chain of Responsibility)
- [设计模式-行为型]责任链模式(Chain of Responsibility)
- Javascript Dom编程艺术 杂记
- 最短路1004,1005
- 大数相加 BIT1000
- 车载DVR的影像切换实现思路
- windows 截取消息
- 设计模式(十三)----- 责任链模式(Chain of Responsibility)----(JAVA版)
- The following code fails when ExecMethod is called. Can anyone pinpoint what I am doing wrong?
- centos配置安装sphinx
- 背景代码、标签及属性
- 通过openURL启动第三方app并传参数
- 孤独的意境,美妙无穷
- HDMI之EDID分析 .
- EXPORT_SYMBOL
- AWS(Amazon Web Services) 培训小记