设计模式GOF23——责任链模式
来源:互联网 发布:网络社会治理的方针 编辑:程序博客网 时间:2024/06/05 03:22
责任链模式(chain of responsibility)是一种行为性模型,行为型模式关注的是系统中对象之间的相互交互,解决系统在运行时对象之间的相互通信和协作,进一步明确对象的职责。相比来说,创建型模式关注对象的创建过程,结构型模式关注对象和类的组合关系。
模式的职责
将能够处理同一类请求的对象连城一条链,锁提交的请求沿着链传递,链上的对象诸葛判断是否有能力处理该请求,如果能则处理,如果不能则传递给链上的下一个对象。
模式的必要性
如果是上述的要求的话,其实用if,else也是可以完成的,但是为什么还有有这个模式呢?因为这样的话会有更好的扩展性和更容易处理。
模式的实现
//需要被责任链请求处理的对象public class LeaveRequest { private String emName; private int day; private String reason; public LeaveRequest(String emName,int day,String reson){ super(); this.emName = emName; this.day = day; this.reason = reson; } public String getEmName() { return emName; } public void setEmName(String emName) { this.emName = emName; } public int getDay() { return day; } public void setDay(int day) { this.day = day; } public String getReason() { return reason; } public void setReason(String reason) { this.reason = reason; }}//责任链的抽象类public abstract class Leader { protected String name; //下一个责任链对象的引用 protected Leader nextLeader; public Leader(String name){ super(); this.name = name; } //下一个责任链对象的设定方法 public void setNextLeader(Leader leader){ this.nextLeader = leader; } //处理责任链请求的核心业务方法。 public abstract void handleRequest(LeaveRequest request);}//责任链的具体对象public class Director extends Leader{ public Director(String name) { super(name); } @Override public void handleRequest(LeaveRequest request) { if(request.getDay()<3){ //批准的逻辑 }else{ if(null != this.nextLeader){ this.nextLeader.handleRequest(request); } } }}//责任链的具体对象class Manage extends Leader{ public Manage(String name) { super(name); } @Override public void handleRequest(LeaveRequest request) { if(request.getDay()<3){ //批准的逻辑 }else{ if(null != this.nextLeader){ this.nextLeader.handleRequest(request); } } }}//责任链的具体对象class GeneralManage extends Leader{ public GeneralManage(String name) { super(name); } @Override public void handleRequest(LeaveRequest request) { if(request.getDay()<3){ //批准的逻辑 }else{ if(null != this.nextLeader){ this.nextLeader.handleRequest(request); } } }}
模式的优势
其实调用部分处理者的创建以及处理者关系的设定可以通过配置文件来配置完成,而且该代码的可扩展性非常好,可以随意添加任何处理对象.
模式的扩展
可以创建一个链的对象,里面存储链表的链关系,可以更加方便的调用。
0 0
- 设计模式GOF23——责任链模式
- 【设计模式】—Gof23种设计模式
- 设计模式GOF23——工厂模式
- 设计模式GOF23——克隆模式
- 设计模式GOF23——适配器模式
- 设计模式GOF23——代理模式
- 设计模式GOF23——组合模式
- 设计模式GOF23——装饰模式
- 设计模式GOF23——外观模式
- 设计模式GOF23——迭代器模式
- 设计模式GOF23——策略模式
- 设计模式GOF23——状态模式
- 设计模式GOF23——观察者模式
- 设计模式GOF23——备忘录模式
- 设计模式GOF23——访问者模式
- 设计模式GOF23——命令模式
- GoF23种设计模式之行为型模式之责任链模式
- 设计模式——责任链模式
- 数据结构实验之栈七:出栈序列判定
- 当鼠标放在图片或文字上,如何让鼠标箭头变成小手
- [转载] 世界上最完美的公式 ----欧拉公式
- 编程语言联系与比较
- java.se.io.14.文字补充
- 设计模式GOF23——责任链模式
- sublime +react+es6开发环境
- 简单左拉菜单栏-css+js
- 建造者模式/生成器模式
- C++引用折叠 —— 摘自维基百科
- 九大基础排序总结与对比
- 二分图模板
- Java虚拟机入门(2)------类加载机制(上)
- 在AndroidStudio中使用Kotlin