设计模式之责任链模式
来源:互联网 发布:qq一手数据出售群 编辑:程序博客网 时间:2024/06/01 23:19
任链(职责连)模式(Chain Of Responsibility)
定义:
发起一个请求,使得多个对象都有机会处理请求,
从而避免了请求的发送者和接收者之间的耦合关系。
将这些对象连成一条链,并沿着这条链传递该请求,直到有对象处理它为止
场景:
多个对象处理同一个请求,
具体由哪一个对象来处理,在程序运行过程中动态决定
角色:
Handler 抽象处理者角色
ConcreteHandler 具体的处理者角色
OCP 对修改关闭,对扩展开放
功能链
不确定被哪些处理对象处理,可能是多个,也有可能一个也没有
战场受伤的战士
优点:
请求者和接收者,松散耦合
动态组合职责
缺点:
影响性能
调用:
运行结果:
整理自教程
定义:
发起一个请求,使得多个对象都有机会处理请求,
从而避免了请求的发送者和接收者之间的耦合关系。
将这些对象连成一条链,并沿着这条链传递该请求,直到有对象处理它为止
场景:
多个对象处理同一个请求,
具体由哪一个对象来处理,在程序运行过程中动态决定
角色:
Handler 抽象处理者角色
ConcreteHandler 具体的处理者角色
OCP 对修改关闭,对扩展开放
功能链
不确定被哪些处理对象处理,可能是多个,也有可能一个也没有
战场受伤的战士
优点:
请求者和接收者,松散耦合
动态组合职责
缺点:
影响性能
本质:分散职责,动态组合
示例:
/** * 抽象的处理者(领导) * @date 2016年2月23日 */public abstract class Leader {//上一级领导处理者(下一个处理对象)protected Leader nextHandler;/** * 处理报账请求 * @param money */public void handleRequest(int money){//报账金额,在处理对象能处理的金额范围内if(money <= limit()){//处理handle(money);}else{//超过了报账金额,交给上一级领导if(nextHandler != null){nextHandler.handleRequest(money);}}}/** * 不同领导处理的金额权限不一样 * @return */protected abstract int limit();/** * 不同领导处理报账的具体方式不一样 * @param money */protected abstract void handle(int money);}
/** * 具体的处理者(组长) * @date 2016年2月23日 */public class GroupLeader extends Leader{@Overrideprotected int limit() {return 1000;}@Overrideprotected void handle(int money) {System.out.println("组长批复报销"+money+"元");}}
/** * 具体的处理者(主管) * @date 2016年2月23日 */public class DirectorLeader extends Leader{@Overrideprotected int limit() {return 5000;}@Overrideprotected void handle(int money) {System.out.println("主管批复报销"+money+"元");}}
/** * 具体的处理者(经理) * @date 2016年2月23日 */public class Manager extends Leader{@Overrideprotected int limit() {return 10000;}@Overrideprotected void handle(int money) {System.out.println("经理批复报销"+money+"元");}}
/** * 具体的处理者(老板) * @date 2016年2月23日 */public class Boss extends Leader{@Overrideprotected int limit() {return Integer.MAX_VALUE;}@Overrideprotected void handle(int money) {System.out.println("老板批复报销"+money+"元");}}
调用:
public class Client {public static void main(String[] args) {//处理对象GroupLeader h1 = new GroupLeader();DirectorLeader h2 = new DirectorLeader();Manager h3 = new Manager();Boss h4 = new Boss();//组合//h1.nextHandler = h2;h2.nextHandler = h3;h3.nextHandler = h4;//请求h2.handleRequest(100000);}}
运行结果:
老板批复报销100000元
整理自教程
0 0
- 设计模式之责任链
- 设计模式之责任链
- 设计模式之【责任链】
- 设计模式之责任链
- 设计模式之责任链
- 设计模式之责任链
- 十 设计模式之责任链模式
- 设计模式之--责任链模式
- 设计模式之责任链模式
- 设计模式之责任链模式
- 【设计模式】之责任链模式
- java设计模式之责任链模式
- 设计模式之(责任链模式)
- 设计模式之--责任链模式
- 设计模式之责任链模式
- 设计模式之责任链模式
- 设计模式之责任链模式
- 设计模式之责任链模式
- Android Camera数据流分析全程记录(非overlay方式)
- try块和异常处理,断言assert
- sessionStorage localStorage 和 cookie 之间的区别转
- IOS面试题总结--UIView和CALayer的层级关系和区别
- iOS学习----------AFNetworking(4)responseSerialization
- 设计模式之责任链模式
- ListView在Activity和Fragment中的显示和使用
- 三条足以让电脑死机的命令(.bat文件)
- POJ 3176 Cow Bowling
- BASIC-15字符串对比字符串 大小写VIP试题
- 常用的linux命令
- Android软件开发随笔笔记第一讲
- 你是不是文艺
- NetBeans下Tomcat无法查看web应用运行,报错:部署错误