设计模式之责任链模式--慕课网笔记
来源:互联网 发布:杀敌算法百度云 编辑:程序博客网 时间:2024/05/18 11:13
第1章 什么是责任链模式
1-1 什么是责任链模式
责任链模式
Chain of Responsibility
- 什么是责任链模式
- 如何实现责任链模式
- 责任链模式如何解耦
- 责任链模式的应用
生活中的COR
- 击鼓传花
- 申请折扣
天然的责任链:公司层级结构
- CEO
- Vice President
- Director/Manager
- Sales
Handler:Sales->Manager->Director->Vice President->CEO
Client: 老张、王老板、小王 request
第2章 有求必应的销售队伍:怎样实现责任链模式
2-1 有求必应的销售团队
- CEO <=55%
- Vice President <=50%
- Director <=40%
- Manager <=30%
- Sales <=5%
/* * 价格处理人,负责处理客户折扣申请 */public abstract class PriceHandler { /* * 直接后继,用于传递请求 */ protected PriceHandler successor; public void setSuccessor(PriceHandler successor) { this.successor = successor; } /* * 处理折扣申请 */ public abstract void processDiscount(float discount);}
/* * 销售, 可以批准5%以内的折扣 */public class Sales extends PriceHandler { @Override public void processDiscount(float discount) { if(discount <= 0.05){ System.out.format("%s批准了折扣:%.2f%n", this.getClass().getName(), discount); }else{ successor.processDiscount(discount); } }}
/* * 销售经理, 可以批准30%以内的折扣 */public class Manager extends PriceHandler { @Override public void processDiscount(float discount) { if(discount<=0.3){ System.out.format("%s批准了折扣:%.2f%n",this.getClass().getName(),discount); }else{ successor.processDiscount(discount); } }}
/* * 销售总监, 可以批准40%以内的折扣 */public class Director extends PriceHandler { @Override public void processDiscount(float discount) { if(discount<=0.4){ System.out.format("%s批准了折扣:%.2f%n",this.getClass().getName(),discount); }else{ successor.processDiscount(discount); } }}
/* * 销售副总裁, 可以批准50%以内的折扣 */public class VicePresident extends PriceHandler { @Override public void processDiscount(float discount) { if(discount<=0.5){ System.out.format("%s批准了折扣:%.2f%n",this.getClass().getName(),discount); }else{ successor.processDiscount(discount); } }}
/* * CEO, 可以批准55%以内的折扣 * 折扣超出55%, 就拒绝申请 */public class CEO extends PriceHandler { @Override public void processDiscount(float discount) { if(discount<=0.55){ System.out.format("%s批准了折扣:%.2f%n",this.getClass().getName(),discount); }else{ System.out.format("%s拒绝了折扣:%.2f%n", this.getClass().getName(),discount); } }}
2-2 千姿百态的客户请求
/* * 客户,请求折扣 */public class Customer { private PriceHandler priceHandler; public void setPriceHandler(PriceHandler priceHandler) { this.priceHandler = priceHandler; } public void requestDiscount(float discount){ priceHandler.processDiscount(discount); } public static void main(String[] args){ Customer customer = new Customer(); customer.setPriceHandler(PriceHandler.createPriceHandler()); Random rand = new Random(); for(int i=1;i<=100;i++){ System.out.print(i+":"); customer.requestDiscount(rand.nextFloat()); } }}
/* * 价格处理人,负责处理客户折扣申请 */public abstract class PriceHandler { /* * 直接后继,用于传递请求 */ protected PriceHandler successor; public void setSuccessor(PriceHandler successor) { this.successor = successor; } /* * 处理折扣申请 */ public abstract void processDiscount(float discount); /* * 创建PriceHandler的工厂方法 */ public static PriceHandler createPriceHandler() { PriceHandler sales = new Sales(); PriceHandler lead = new Lead(); PriceHandler man = new Manager(); PriceHandler dir = new Director(); PriceHandler vp = new VicePresident(); PriceHandler ceo = new CEO(); sales.setSuccessor(lead); lead.setSuccessor(man); man.setSuccessor(dir); dir.setSuccessor(vp); vp.setSuccessor(ceo); return sales; }}
2-3 不管怎么变折扣你得批
加入销售组长 折扣15%
/* * 销售小组长, 可以批准15%以内的折扣 */public class Lead extends PriceHandler { @Override public void processDiscount(float discount) { if(discount<=0.15){ System.out.format("%s批准了折扣:%.2f%n",this.getClass().getName(),discount); }else{ successor.processDiscount(discount); } }}
/* * 客户,请求折扣 */public class Customer { private PriceHandler priceHandler; public void setPriceHandler(PriceHandler priceHandler) { this.priceHandler = priceHandler; } public void requestDiscount(float discount){ priceHandler.processDiscount(discount); } public static void main(String[] args){ Customer customer = new Customer(); customer.setPriceHandler(PriceHandlerFactory.createPriceHandler()); Random rand = new Random(); for(int i=1;i<=100;i++){ System.out.print(i+":"); customer.requestDiscount(rand.nextFloat()); } }}
public class PriceHandlerFactory { /* * 创建PriceHandler的工厂方法 */ public static PriceHandler createPriceHandler() { PriceHandler sales = new Sales(); PriceHandler lead = new Lead(); PriceHandler man = new Manager(); PriceHandler dir = new Director(); PriceHandler vp = new VicePresident(); PriceHandler ceo = new CEO(); sales.setSuccessor(lead); lead.setSuccessor(man); man.setSuccessor(dir); dir.setSuccessor(vp); vp.setSuccessor(ceo); return sales; }}
第3章 剖析责任链模式
3-1 剖析责任链模式
在责任链模式中,作为请求接收者的多个对象通过对其后继的引用而连接起来形成一
条链。请求在这条链上传递,直到链上某一个接收者处理这个请求。每个接收者都可
以选择自行处理请求或是向后继传递请求。
依赖于抽象不依赖于具体
发送请求的客户端并不知道链上的哪一个接收者会处理这个请求,从而实现了客户端
和接收者之间的解耦。
真的好吗?
- 开闭原则
扩展开放,修改关闭
永远没有正确答案,取决于项目实际对降低耦合的要求是什么,是否有其他替代方案,
根据实际情况取舍而来 - 执行性能
处理器首尾相接,有请求时需要遍历链
时间、内存
awt早期使用责任链模式,现在改为了观察者模式
第4章 责任链模式的实际应用
4-1 责任链模式的应用
Exception Handling
main->Method with an exception handler->Method without an exception handler->Method where error occurred
JavaScript Event Model
capture phase(捕获) -> target phase -> bubbling phase(冒泡)
FilterChain in Web
设计模式和oo的基本原则
《模式的秘密—责任链模式》视频地址
阅读全文
0 0
- 设计模式之责任链模式--慕课网笔记
- 设计模式之10责任链模式(笔记)
- 深入浅出设计模式笔记之十一:责任链模式
- Java设计模式笔记之责任链模式
- 设计模式之禅学习笔记--责任链模式
- 设计模式学习笔记之责任链模式
- Java设计模式笔记之责任链模式
- Java23种设计模式学习笔记之责任链模式
- 设计模式之禅笔记-责任链模式
- 设计模式之责任链
- 设计模式之责任链
- 设计模式之【责任链】
- 设计模式之责任链
- 设计模式之责任链
- 设计模式之责任链
- 设计模式笔记-责任链模式
- 12.责任链模式(设计模式笔记)
- 设计模式笔记--责任链模式
- 常用正则表达式大全,手机、电话、邮箱、身份证(最严格的验证)、IP地址、网址、日期等,一般前台js验证,来这里就够了...
- 毕业校长讲话2017-6-15
- java继承
- hdu 6130 Kolakoski
- [RK3288][Android7.1.2] Launcher3 源码阅读之step3:详解Launcher的OnCreate方法的B部分
- 设计模式之责任链模式--慕课网笔记
- 组合数有关的公式及常用求和
- 「网络流 24 题」软件补丁
- struts2.5报错ClassNotFoundException: org...dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
- 【Unity】unity 人物动态头像
- 【Java】Java绘图技术与事件处理机制
- 简约而不简单的Django教程
- HTML
- python读取excel