设计模式(24)-----责任链模式
生活随笔
收集整理的这篇文章主要介绍了
设计模式(24)-----责任链模式
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
责任链模式(chain of responsibility)
定义
责任链模式是对象的行为模式。使多个对象都有机会处理请求,从而避免请求的发送者和接受者直接的耦合关系。将这些对象连成一条链,沿着这条链传递该请求,直到有一个对象处理它为止。
UML类图
角色
抽象处理者(Handler)角色 :定义一个请求的接口。如果需要可以定义个一个方法用来设定和返回下家对象的引用。 具体处理者(ConcreteHandler)角色 :如果可以处理就处理请求,如果不能处理,就把请求传给下家,让下家处理。也就是说它处理自己能处理的请求且可以访问它的下家。例子
有人想请假,小组长只能审批小于等于1天的假期,项目经理可以审批小于等于3天的假期,CEO可以审批所有的假期。
Handler
package com.csdhsm.designpattem.chainofresponsibility;/** * @Title: Handler.java * @Description: 审批请假抽象类* @author: Han * @date: 2016年6月29日 下午6:05:46 */ public abstract class Handler {protected Handler handler;public Handler getHandler() {return handler;}public void setHandler(Handler handler) {this.handler = handler;}//审批方法public abstract void approve(int day); }GroupLeader(小组长)
package com.csdhsm.designpattem.chainofresponsibility;/** * @Title: GroupLeader.java * @Description: 小组长,能审批的是小于等于1天的请假申请 * @author: Han * @date: 2016年6月29日 下午5:58:29 */ public class GroupLeader extends Handler {@Overridepublic void approve(int day) {if(day <= 1) {System.out.println("小组长审批");} else {System.out.println("超过了小组长权限,移交上级");this.getHandler().approve(day);}} }ProjectManager(项目经理)
package com.csdhsm.designpattem.chainofresponsibility;/** * @Title: ProjectManager.java * @Description: 项目经理,能审批的是小于等于3天的请假* @author: Han * @date: 2016年6月29日 下午6:01:49 */ public class ProjectManager extends Handler {@Overridepublic void approve(int day) {if(day <= 3) {System.out.println("项目经理审批");} else {System.out.println("超过了项目经理权限,移交上级");getHandler().approve(day);}} }CEO
package com.csdhsm.designpattem.chainofresponsibility;/** * @Title: CEO.java * @Description: 最后移交到CEO审批* @author: Han * @date: 2016年6月29日 下午6:03:59 */ public class CEO extends Handler {@Overridepublic void approve(int day) {System.out.println("CEO审批");} }客户端
package com.csdhsm.designpattem.chainofresponsibility;public class Solution {public static void main(String[] args) {Handler leader = new GroupLeader();Handler manager = new ProjectManager();Handler ceo = new CEO();//把Handler连成一条链 leader.setHandler(manager);manager.setHandler(ceo);//处理请求leader.approve(6);} }结果
OK,成功!
总结
优点
调用者不需知道具体谁来处理请求,也不知道链的具体结构,降低了节点域节点的耦合度;可在运行时动态修改链中的对象职责,增强了给对象指派职责的灵活性。
缺点
没有明确的接收者,可能传到链的最后,也没得到正确的处理。
转载于:https://www.cnblogs.com/a294098789/p/5627861.html
总结
以上是生活随笔为你收集整理的设计模式(24)-----责任链模式的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: Ubuntu 14.04 安装Visua
- 下一篇: java 解析并生成 XML