责任链模式
2017-10-11 23:17
316 查看
1类图
2定义:
很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织和分配责任。
3应用场景:
3.1 多个对象可以处理同一个请求,但具体由那个对象则在运行时动态决定。
3.2 在请求处理者的情况下向多个对象中的一个提交一个请求。
3.3 需要动态指定一组对象处理请求。
通用模板:
4抽象处理者
public abstract class Handler { protected Handler successor; public abstract void handleRequest(String condition); }
5具体处理者1
public class ConcreteHandler1 extends Handler { @Override public void handleRequest(String condition) { // TODO Auto-generated method stub if(condition.equals("ConcreteHandler1")){ System.out.println("ConcreteHandler1 handled"); return; }else{ successor.handleRequest(condition); } } }
6具体处理者2
public class ConcreteHandler2 extends Handler { @Override public void handleRequest(String condition) { // TODO Auto-generated method stub if(condition.equals("ConcreteHandler2")){ System.out.println("ConcreteHandler2 handled"); return; }else{ successor.handleRequest(condition); } } }
7测试
public class Client { public static void main(String[] args) { ConcreteHandler1 handler1 = new ConcreteHandler1(); ConcreteHandler2 handler2 = new ConcreteHandler2(); handler1.successor = handler2; handler2.successor = handler1; handler1.handleRequest("ConcreteHandler2"); } }
简单实现:
8抽象领导类
public abstract class Leader { protected Leader nextHandler; public final void handleRequest(int money){ if(money <= limit()){ handle(money); }else{ if(null != nextHandler) nextHandler.handleRequest(money); } } public abstract int limit(); public abstract void handle(int money); }
9组长类
public class GroupLeader extends Leader { @Override public int limit() { return 1000; } @Override public void handle(int money) { System.out.println("组长批复报销: " + money + "元"); } }
10主管类
public class Director extends Leader { @Override public int limit() { // TODO Auto-generated method stub return 5000; } @Override public void handle(int money) { // TODO Auto-generated method stub System.out.println("主管批复报销: " + money + "元"); } }
11经理类
public class Manager extends Leader { @Override public int limit() { // TODO Auto-generated method stub return 10000; } @Override public void handle(int money) { // TODO Auto-generated method stub System.out.println("经理批复报销: " + money + "元"); } }
12老板类
public class Boss extends Leader { @Override public int limit() { // TODO Auto-generated method stub return Integer.MAX_VALUE; } @Override public void handle(int money) { // TODO Auto-generated method stub System.out.println("老板批复报销: " + money + "元"); } }
13测试类
public class Test { public static void main(String[] args) { // TODO Auto-generated method stub GroupLeader groupLeader = new GroupLeader(); Director director = new Director(); Manager manager = new Manager(); Boss boss = new Boss(); groupLeader.nextHandler = director; director.nextHandler = manager; manager.nextHandler = boss; groupLeader.handleRequest(9000); } }
相关文章推荐
- 深入浅出责任链模式
- Groovy探索 自定义Range 三 自定义Range与责任链模式
- 观察者模式 VS 责任链模式
- 深入浅出基于Java的责任链模式
- 极速理解设计模式系列:12.责任链模式(Chain of Responsibility Pattern)
- 常用设计模式总结--责任链模式
- 责任链模式
- 责任链模式
- 责任链模式在Tomcat中的应用
- JAVA设计模式—责任链模式(Chain Of Responsibility)
- 设计模式-责任链模式(Chain of Responsibility Method)
- 我所理解的设计模式(C++实现)——责任链模式(Chain Of Responsibility Pattern)
- 设计模式之责任链模式
- Java开发中的23种设计模式之十七:责任链模式(Chain of Responsibility)
- 责任链模式
- 责任链模式
- Design Pattern Chain of Reponsibility 责任链模式
- 责任链模式之开发新游戏的审批过程
- C#设计模式(21)——责任链模式
- 责任链模式学习