设计模式之责任链模式
来源:互联网 发布:百度蜘蛛池源码 编辑:程序博客网 时间:2024/06/05 22:56
设计模式之责任链模式
处理者抽象类Handler
客户对象Customer
责任链模式就是客户对象发起一个请求,根据这个请求的具体参数,从责任链中的众多对象中,选择出一个处理者对象来处理这个请求。如何选择出呢?每个处理者对象先判断自己是否可以处理,是的话,就自己处理,中断传递;否的话,就向后继传递请求,一级一级的传递下去。
处理者抽象类Handler:
public abstract class Handler { protected Handler successor; public void setSuccessor(Handler successor) { this.successor = successor; } public abstract void handDiscount(float discount);}
底层销售员,继承Handler抽象类
public class Sale extends Handler { @Override public void handDiscount(float discount) { if(discount<=0.25){ System.out.println(this.getClass()+"批准了这次折扣:"+discount); }else{ this.successor.handDiscount(discount); } }}
销售经理,继承Handler抽象类
public class Manager extends Handler { @Override public void handDiscount(float discount) { if(discount<=0.35){ System.out.println(this.getClass()+"批准了这次折扣:"+discount); }else{ this.successor.handDiscount(discount); } }}
主管,副总裁,总裁,继承Handler抽象类(代码省略)
客户对象Customer
public class Customer { private Handler handler; public void setHandler(Handler handler) { this.handler = handler; } public Customer(Handler handler) { super(); this.handler = handler; } public void requestDiscount(float discount){ handler.handDiscount(discount); }}
处理者工厂
public class HandlerFactory { //工厂设计模式,创建对象 public static Handler creatHandler() { Handler sale=new Sale(); Handler manager=new Manager(); Handler director=new Director(); Handler vicePresident=new VicePresident(); Handler ceo=new Ceo(); sale.setSuccessor(manager); manager.setSuccessor(director); director.setSuccessor(vicePresident); vicePresident.setSuccessor(ceo); return sale; }}
测试类
public class Test { public static void main(String[] args){ Customer customer=new Customer(HandlerFactory.creatHandler()); for(int i=0;i<10;i++){ float discount=new Random().nextFloat(); customer.requestDiscount(discount); } }}
总结
责任链核心:Handler中引入自身对象,作为后继对象,这样才能一级一级的传递下去,形成责任链。
责任链模式缺点:只有一个请求,只需一个concreteHandler去处理,却通过工厂方法创建了大量的concreteHandler对象,极大的浪费内存。自己使用时需谨慎。
责任链模式应用:java的异常处理机制,每个异常向上抛,直到顶级异常接口Throwsable;javascript中的dom,例如:td–tr–table
自己的一点点理解,如有不对,欢迎指正。来自于慕课网
阅读全文
1 0
- 设计模式之责任链
- 设计模式之责任链
- 设计模式之【责任链】
- 设计模式之责任链
- 设计模式之责任链
- 设计模式之责任链
- 十 设计模式之责任链模式
- 设计模式之--责任链模式
- 设计模式之责任链模式
- 设计模式之责任链模式
- 【设计模式】之责任链模式
- java设计模式之责任链模式
- 设计模式之(责任链模式)
- 设计模式之--责任链模式
- 设计模式之责任链模式
- 设计模式之责任链模式
- 设计模式之责任链模式
- 设计模式之责任链模式
- springmvc之参数绑定(一)
- MySql无法远程登录以及IP被锁解决办法
- 如何写移动页面的顶部大图
- mysql由于权限问题看不到用户数据库
- Oracle服务启动顺序导致ORA-12514
- 设计模式之责任链模式
- 最大公因子_欧几里得算法_c++实现
- Oracle卸载后手工删除内容
- Oracle根据字段值找到表名和列名
- 项目管理半开源工具备份和恢复
- 手把手教你用亚马逊云搭建免费VPN服务器
- 在场景中添加按钮
- Cognos11中报XQE-JDB-0004查找驱动程序类错误
- Cognos11中关于CJAP第三方认证的相关配置