责任链模式(行为类)
来源:互联网 发布:java主流框架有哪些 编辑:程序博客网 时间:2024/06/07 06:51
UML
- Handler(抽象处理角色): 定义一个处理请求的接口。如果需要,接口可以定义出一个方法,以设定和返回下家的引用。
- ConcreteHandler(具体处理者角色): 具体处理者角色接到请求后,可以选择将请求处理掉,或者传递到下家。
介绍
- 意图:避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。
- 优点: 1、降低耦合度。它将请求的发送者和接收者解耦。 2、简化了对象。使得对象不需要知道链的结构。 3、增强给对象指派职责的灵活性。通过改变链内的成员或者调动它们的次序,允许动态地新增或者删除责任。 4、增加新的请求处理类很方便。
- 缺点: 1、系统性能将受到一定影响,而且在进行代码调试时不太方便,可能会造成循环调用。 2、可能不容易观察运行时的特征,有碍于除错。
- 应用 jsp中Filter
例子
UML
介绍
销售打折权限请求案例
代码
PriceHandler(handler)
/* * 价格处理人,负责处理客户折扣申请 */public abstract class PriceHandler { /* * 直接后继,用于传递请求 */ protected PriceHandler successor; public void setSuccessor(PriceHandler successor) { this.successor = successor; } /* * 处理折扣申请 */ public abstract void processDiscount(float discount);}
Sales(ConcreteHandler)
/* * 销售, 可以批准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); } }}
Lead
/* * 销售小组长, 可以批准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); } }}
Manager(ConcreteHandler)
/* * 销售经理, 可以批准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); } }}
Director(ConcreteHandler)
/* * 销售总监, 可以批准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); } }}
VicePresident(ConcreteHandler)
/* * 销售副总裁, 可以批准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
/* * 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); } }}
结果
1:com.java.cor.handler.Director批准了折扣:0.342:com.java.cor.handler.CEO拒绝了折扣:0.673:com.java.cor.handler.Director批准了折扣:0.384:com.java.cor.handler.Manager批准了折扣:0.235:com.java.cor.handler.CEO拒绝了折扣:0.906:com.java.cor.handler.VicePresident批准了折扣:0.437:com.java.cor.handler.VicePresident批准了折扣:0.418:com.java.cor.handler.Manager批准了折扣:0.179:com.java.cor.handler.CEO拒绝了折扣:0.6610:com.java.cor.handler.CEO拒绝了折扣:0.9011:com.java.cor.handler.CEO拒绝了折扣:0.9712:com.java.cor.handler.CEO拒绝了折扣:0.6813:com.java.cor.handler.Director批准了折扣:0.3514:com.java.cor.handler.VicePresident批准了折扣:0.4215:com.java.cor.handler.CEO拒绝了折扣:0.6716:com.java.cor.handler.Lead批准了折扣:0.1117:com.java.cor.handler.Lead批准了折扣:0.0918:com.java.cor.handler.Director批准了折扣:0.4019:com.java.cor.handler.CEO拒绝了折扣:0.8520:com.java.cor.handler.Lead批准了折扣:0.14
参考
- 设计模式之禅
- java与模式
- 慕课网教学视频
0 0
- 责任链模式(行为类)
- 责任链模式 - 行为模式
- 责任链模式(行为型)
- 设计模式--行为型--责任链模式
- 行为型模式----责任链模式
- 行为模式之责任链模式
- 行为型模式-责任链模式
- 行为型模式--责任链模式
- 行为型设计模式-责任链模式
- 行为型设计模式-责任链模式
- java 行为模式 责任链模式
- 【行为模式】chain of responsibility(责任链)
- 责任链模式(行为型)
- 11-行为型-责任链模式
- 行为型之责任链模式
- 行为型-责任链模式(Responsibility)
- java 设计模式-行为模式之责任链模式
- 设计模式-行为设计模式:责任链模式 ResponsibilityChain
- Spark SQL 函数操作
- BNU Online Judge 1006
- 尚硅谷学习笔记--Struts2 类型转换(1)
- 第十五周项目H判断字符串是否为回文
- android中实现从一个图片中截取一部分,在翻转,成一个圆形显示
- 责任链模式(行为类)
- nodejs中使用mongoose保存数据
- 深入JVM-java虚拟机的基本结构
- jQuery中易混淆、错误理解概念总结(逐渐添加)
- 第十五周oj题目字符串分段
- 11.2连续数据和连续函数
- jsp修改用户信息
- V4L2视频采集与H264编码4—X264编码H264视频
- 拼音切分的Trie树解决方案