责任链模式(java语言实现)
来源:互联网 发布:mpp文件打开软件 编辑:程序博客网 时间:2024/05/18 15:25
什么是责任链模式
定义:
在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织和分配责任。
举例子:
击鼓传花:
击鼓者(Client)+ 花球(Request) + 众人组成(Handler Chain)
折扣申请:
不同的折扣 level , 需要不同的管理层级的人员(CEO,Vice President,Director,Manager,Sales)来批准。 客户不在乎是谁处理了这个请求,只要得到它要的折扣就行了。 # 如何实现责任链模式
责任链模式的实现
UML
PriceHandler.java
package com.imooc.pattern.cor.handler;/* * 价格处理人,负责处理客户折扣申请 */public abstract class PriceHandler { /* * 直接后继,用于传递请求 */ protected PriceHandler successor; public void setSuccessor(PriceHandler successor) { this.successor = successor; } /* * 处理折扣申请 */ public abstract void processDiscount(float discount);}
PriceHandlerFactory.java
package com.imooc.pattern.cor.handler;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; }}
Sales.java PriceHandler 的一个具体子类实现,其他类似。
package com.imooc.pattern.cor.handler;/* * 销售, 可以批准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); } }}
责任链模式如何解耦
发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织和分配责任。
责任链模式的应用
0 0
- 责任链模式(java语言实现)
- 设计模式--责任链模式--Java实现
- java责任链模式
- java责任链模式
- java责任链模式
- java 责任链模式
- java责任链模式
- java责任链模式
- java 责任链模式
- JAVA-责任链模式
- java责任链模式
- java 责任链模式
- Java 责任链模式
- java责任链模式
- Java责任链模式
- java责任链模式
- Java责任链模式
- 《大话设计模式》java实现之责任链模式
- 单调递增子序列(二)(nyoj214)
- Intellij Idea 使用笔记
- 获取字符数方法
- SPOJ 5971 LCM SUM
- 项目实施中CRP的含义,以及各个阶段
- 责任链模式(java语言实现)
- javaweb基于内容的图片搜索引擎(4)_前台检索以及结果
- vertical-align: middle垂直居中
- web开发中表单的验证问题
- 【静下心学习Unity】学习笔记 (三)Unity Physics - Hinge Joint(铰链关节) 实现门的功能
- popupwindow的学习
- Maven学习记录(一)--IDEA下环境配置
- SQL中的limit
- c++第三次实验-1