java设计模式--责任链 Chain of Responsibility
来源:互联网 发布:遥感大数据特点 编辑:程序博客网 时间:2024/05/22 13:47
在责任链模式里,请求在这个链上传递,直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织和分配责任。在以下条件下可考虑使用Chain of Responsibility:
1、有多个的对象可以处理一个请求,哪个对象处理该请求运行时刻自动确定。
2、你想在不明确指定接受者的情况下,想过个对象中的一个提交一个请求。
3、可处理一个请求的对象集合应该被动态指定。
示例:打折审批流程,销售人员能打折97%,销售主管打折不能大于95%,打折大于95%要经理审批。代码如下:
测试代码:
优点:
无法预知来自外界折扣是属于哪种类型,每个类如果碰到它不能处理的折扣信息只要放弃就可以。
缺点:
扩展性差,一定要有一个统一的接口。
缺点是效率低,因为一个请求的完成可能要遍历到最后才可能完成。
1、有多个的对象可以处理一个请求,哪个对象处理该请求运行时刻自动确定。
2、你想在不明确指定接受者的情况下,想过个对象中的一个提交一个请求。
3、可处理一个请求的对象集合应该被动态指定。
示例:打折审批流程,销售人员能打折97%,销售主管打折不能大于95%,打折大于95%要经理审批。代码如下:
/** * 折扣审批抽象类 */public abstract class DiscountHandler {//下一个处理流程private DiscountHandler nextDiscountHandler;public void setNextDiscountHandler(DiscountHandler nextDiscountHandler) {this.nextDiscountHandler = nextDiscountHandler;}public DiscountHandler getNextDiscountHandler() {return nextDiscountHandler;}//折扣审批,留给子类实现public abstract void approve(int discount);}下面是销售人员,销售主管,经理的审批流程:
/** * 销售人员,折扣不能小于97% */public class Seller extends DiscountHandler {public void approve(int discount) {if(discount>=97){System.out.println("Seller 审批通过");}else{//如果有下一级审批,则交给我下一级审批if(this.getNextDiscountHandler()!=null){this.getNextDiscountHandler().approve(discount);}}}}/** * 主管,折扣不能小于95% */public class Manager extends DiscountHandler {public void approve(int discount) {if(discount>=95){System.out.println("Manager 审批通过");}else{//如果有下一级审批,则交给我下一级审批if(this.getNextDiscountHandler()!=null){this.getNextDiscountHandler().approve(discount);}}} }/** * 销售经理,经理审批折扣小于 95%的 */public class Amaldar extends DiscountHandler{public void approve(int discount) {if(discount<95){System.out.println("Amaldar 审批");}else{//如果有下一级审批,则交给我下一级审批if(this.getNextDiscountHandler()!=null){this.getNextDiscountHandler().approve(discount);}}}}
测试代码:
public static void main(String[] args) { Amaldar amaldar = new Amaldar(); Manager manager = new Manager(); //设置上级审批,通过设置上级审批,形成一个审批链 manager.setNextDiscountHandler(amaldar); //设置上级审批 Seller seller = new Seller(); seller.setNextDiscountHandler(manager); seller.approve(94); seller.approve(95); seller.approve(96); seller.approve(97); seller.approve(98); }
优点:
无法预知来自外界折扣是属于哪种类型,每个类如果碰到它不能处理的折扣信息只要放弃就可以。
缺点:
扩展性差,一定要有一个统一的接口。
缺点是效率低,因为一个请求的完成可能要遍历到最后才可能完成。
0 0
- 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 Pattern(责任链模式)
- 设计模式 - Chain of Responsibility Pattern(责任链模式)
- 设计模式之责任链Chain of Responsibility模式
- 设计模式:责任链模式(Chain of Responsibility, CoR)
- 设计模式——责任链模式(Chain Of Responsibility)
- 设计模式初探-责任链模式(CHAIN OF RESPONSIBILITY)
- 设计模式之责任链模式(Chain of Responsibility)
- [设计模式-行为型]责任链模式(Chain of Responsibility)
- 行为设计模式---责任链模式(Chain of Responsibility)
- 浅谈设计模式:责任链模式(Chain Of Responsibility)
- ubuntu安装Hadoop的问题
- Android 展示内容较长,加省略号显示
- 常见正则表达式
- 安装及配置Maven环境变量
- jasig.cas客户端认证成功后ConnectionTimedout
- java设计模式--责任链 Chain of Responsibility
- 【PM】互联网项目管理要点
- centos7添加zabbix源
- 关于阿里的rocketMQ版本问题
- TabLayout 与ViewPager 搭配tab内容不显示问题
- LDA实现
- Spring与Dao-Jdbc模板-使用Spring的JUnit4测试
- webService基础
- Redux-form嵌套到实际项目开发案例九