设计模式——责任链模式
2018-01-15 16:32
162 查看
个人理解:
1. 责任链模式是一个行为模式。责任链就是从一个起点发起请求,然后沿着任务链依次传递给每一个节点上的对象,直到有一个节点处理这个请求为止。
2. 使多个对象都有机会处理请求,从而避免了请求的发送者和接受者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递改请求,直到有对象处理它为止
3. 成员角色
AbstractHandler:抽象处理者角色,声明一个处理请求的方法,持有下一个处理节点Handler对象的引用。
ConcreteHandler: 具体的处理者,对请求进行处理,如果不处理就讲请求转发给下一个节点上的处理对象。
4. 示例代码说明: 客户端responsibilityChain()方法中,实例化了三个ConcreteHandler类,循环持有彼此
5. 示例代码:
客户端调用
6. 运行结果:
01-15 16:32:18.945 15367-15367/com.wdp.designtest I/responsibilityChain: ****************第一局****************
01-15 16:32:18.945 15367-15367/com.wdp.designtest I/盲僧李青: ----------------盲僧李青 抓住敌方英雄 && 盲僧李青有大招-----------------
01-15 16:32:18.945 15367-15367/com.wdp.designtest I/盲僧李青: ---------------- 盲僧李青 释放大招-----------------
01-15 16:32:18.945 15367-15367/com.wdp.designtest I/盲僧李青: ----------------盲僧李青 抓住敌方英雄 && 德邦赵信有大招-----------------
01-15 16:32:18.945 15367-15367/com.wdp.designtest I/盲僧李青: ----------------盲僧李青 把敌人扔给下个英雄-----------------
01-15 16:32:18.946 15367-15367/com.wdp.designtest I/德邦赵信: ----------------德邦赵信 抓住敌方英雄 && 德邦赵信有大招-----------------
01-15 16:32:18.946 15367-15367/com.wdp.designtest I/德邦赵信: ---------------- 德邦赵信 释放大招-----------------
01-15 16:32:18.946 15367-15367/com.wdp.designtest I/盲僧李青: ----------------盲僧李青 抓住敌方英雄 && 迅捷斥候提姆有大招-----------------
01-15 16:32:18.946 15367-15367/com.wdp.designtest I/盲僧李青: ----------------盲僧李青 把敌人扔给下个英雄-----------------
01-15 16:32:18.946 15367-15367/com.wdp.designtest I/德邦赵信: ----------------德邦赵信 抓住敌方英雄 && 迅捷斥候提姆有大招-----------------
01-15 16:32:18.946 15367-15367/com.wdp.designtest I/德邦赵信: ----------------德邦赵信 把敌人扔给下个英雄-----------------
01-15 16:32:18.946 15367-15367/com.wdp.designtest I/迅捷斥候提姆: ----------------迅捷斥候提姆 抓住敌方英雄 && 迅捷斥候提姆有大招-----------------
01-15 16:32:18.946 15367-15367/com.wdp.designtest I/迅捷斥候提姆: ---------------- 迅捷斥候提姆 释放大招-----------------
01-15 16:32:18.946 15367-15367/com.wdp.designtest I/responsibilityChain: ****************第二局****************
01-15 16:32:18.946 15367-15367/com.wdp.designtest I/德邦赵信: ----------------德邦赵信 抓住敌方英雄 && 盲僧李青有大招-----------------
01-15 16:32:18.946 15367-15367/com.wdp.designtest I/德邦赵信: ----------------德邦赵信 把敌人扔给下个英雄-----------------
01-15 16:32:18.946 15367-15367/com.wdp.designtest I/迅捷斥候提姆: ----------------迅捷斥候提姆 抓住敌方英雄 && 盲僧李青有大招-----------------
01-15 16:32:18.946 15367-15367/com.wdp.designtest I/迅捷斥候提姆: ----------------迅捷斥候提姆 把敌人扔给下个英雄-----------------
01-15 16:32:18.946 15367-15367/com.wdp.designtest I/盲僧李青: ----------------盲僧李青 抓住敌方英雄 && 盲僧李青有大招-----------------
01-15 16:32:18.946 15367-15367/com.wdp.designtest I/盲僧李青: ---------------- 盲僧李青 释放大招-----------------
01-15 16:32:18.946 15367-15367/com.wdp.designtest I/德邦赵信: ----------------德邦赵信 抓住敌方英雄 && 德邦赵信有大招-----------------
01-15 16:32:18.946 15367-15367/com.wdp.designtest I/德邦赵信: ---------------- 德邦赵信 释放大招-----------------
01-15 16:32:18.946 15367-15367/com.wdp.designtest I/德邦赵信: ----------------德邦赵信 抓住敌方英雄 && 迅捷斥候提姆有大招-----------------
01-15 16:32:18.946 15367-15367/com.wdp.designtest I/德邦赵信: ----------------德邦赵信 把敌人扔给下个英雄-----------------
01-15 16:32:18.946 15367-15367/com.wdp.designtest I/迅捷斥候提姆: ----------------迅捷斥候提姆 抓住敌方英雄 && 迅捷斥候提姆有大招-----------------
01-15 16:32:18.946 15367-15367/com.wdp.designtest I/迅捷斥候提姆: ---------------- 迅捷斥候提姆 释放大招-----------------
01-15 16:32:18.946 15367-15367/com.wdp.designtest I/responsibilityChain: ****************第三局****************
01-15 16:32:18.946 15367-15367/com.wdp.designtest I/迅捷斥候提姆: ----------------迅捷斥候提姆 抓住敌方英雄 && 盲僧李青有大招-----------------
01-15 16:32:18.946 15367-15367/com.wdp.designtest I/迅捷斥候提姆: ----------------迅捷斥候提姆 把敌人扔给下个英雄-----------------
01-15 16:32:18.946 15367-15367/com.wdp.designtest I/盲僧李青: ----------------盲僧李青 抓住敌方英雄 && 盲僧李青有大招-----------------
01-15 16:32:18.946 15367-15367/com.wdp.designtest I/盲僧李青: ---------------- 盲僧李青 释放大招-----------------
01-15 16:32:18.946 15367-15367/com.wdp.designtest I/迅捷斥候提姆: ----------------迅捷斥候提姆 抓住敌方英雄 && 德邦赵信有大招-----------------
01-15 16:32:18.946 15367-15367/com.wdp.designtest I/迅捷斥候提姆: ----------------迅捷斥候提姆 把敌人扔给下个英雄-----------------
01-15 16:32:18.946 15367-15367/com.wdp.designtest I/盲僧李青: ----------------盲僧李青 抓住敌方英雄 && 德邦赵信有大招-----------------
01-15 16:32:18.947 15367-15367/com.wdp.designtest I/盲僧李青: ----------------盲僧李青 把敌人扔给下个英雄-----------------
01-15 16:32:18.947 15367-15367/com.wdp.designtest I/德邦赵信: ----------------德邦赵信 抓住敌方英雄 && 德邦赵信有大招-----------------
01-15 16:32:18.947 15367-15367/com.wdp.designtest I/德邦赵信: ---------------- 德邦赵信 释放大招-----------------
01-15 16:32:18.947 15367-15367/com.wdp.designtest I/迅捷斥候提姆: ----------------迅捷斥候提姆 抓住敌方英雄 && 迅捷斥候提姆有大招-----------------
01-15 16:32:18.947 15367-15367/com.wdp.designtest I/迅捷斥候提姆: ---------------- 迅捷斥候提姆 释放大招-----------------
1. 责任链模式是一个行为模式。责任链就是从一个起点发起请求,然后沿着任务链依次传递给每一个节点上的对象,直到有一个节点处理这个请求为止。
2. 使多个对象都有机会处理请求,从而避免了请求的发送者和接受者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递改请求,直到有对象处理它为止
3. 成员角色
AbstractHandler:抽象处理者角色,声明一个处理请求的方法,持有下一个处理节点Handler对象的引用。
ConcreteHandler: 具体的处理者,对请求进行处理,如果不处理就讲请求转发给下一个节点上的处理对象。
4. 示例代码说明: 客户端responsibilityChain()方法中,实例化了三个ConcreteHandler类,循环持有彼此
5. 示例代码:
public abstract class AbstractHandler { private AbstractHandler handler; public AbstractHandler getHandler() { return handler; } public void setHandler(AbstractHandler handler) { this.handler = handler; } protected abstract void operator(String condition); }
public class ConcreteHandler extends AbstractHandler{ private String name; public ConcreteHandler(String name) { this.name = name; } @Override public void operator(String condition) { Log.i(name, "----------------" + name + " 抓住敌方英雄 && " + condition + < 4000 span style="color:#6a8759;">"有大招-----------------"); if (condition.equals(name)){ Log.i(name, "---------------- " + name + " 释放大招-----------------"); } else { if (null != getHandler()){ Log.i(name, "----------------" + name + " 把敌人扔给下个英雄-----------------"); getHandler().operator(condition); }else { Log.i(name, "----------------" + name + "后面没有英雄了-----------------"); } } } }
客户端调用
private void responsibilityChain(){ ConcreteHandler h1 = new ConcreteHandler("盲僧李青"); ConcreteHandler h2 = new ConcreteHandler("德邦赵信"); ConcreteHandler h3 = new ConcreteHandler("迅捷斥候提姆"); h1.setHandler(h2); h2.setHandler(h3); h3.setHandler(h1); Log.i("responsibilityChain", "****************第一局****************\n"); h1.operator("盲僧李青"); h1.operator("德邦赵信"); h1.operator("迅捷斥候提姆"); Log.i("responsibilityChain", "****************第二局****************\n"); h2.operator("盲僧李青"); h2.operator("德邦赵信"); h2.operator("迅捷斥候提姆"); Log.i("responsibilityChain", "****************第三局****************\n"); h3.operator("盲僧李青"); h3.operator("德邦赵信"); h3.operator("迅捷斥候提姆"); }
6. 运行结果:
01-15 16:32:18.945 15367-15367/com.wdp.designtest I/responsibilityChain: ****************第一局****************
01-15 16:32:18.945 15367-15367/com.wdp.designtest I/盲僧李青: ----------------盲僧李青 抓住敌方英雄 && 盲僧李青有大招-----------------
01-15 16:32:18.945 15367-15367/com.wdp.designtest I/盲僧李青: ---------------- 盲僧李青 释放大招-----------------
01-15 16:32:18.945 15367-15367/com.wdp.designtest I/盲僧李青: ----------------盲僧李青 抓住敌方英雄 && 德邦赵信有大招-----------------
01-15 16:32:18.945 15367-15367/com.wdp.designtest I/盲僧李青: ----------------盲僧李青 把敌人扔给下个英雄-----------------
01-15 16:32:18.946 15367-15367/com.wdp.designtest I/德邦赵信: ----------------德邦赵信 抓住敌方英雄 && 德邦赵信有大招-----------------
01-15 16:32:18.946 15367-15367/com.wdp.designtest I/德邦赵信: ---------------- 德邦赵信 释放大招-----------------
01-15 16:32:18.946 15367-15367/com.wdp.designtest I/盲僧李青: ----------------盲僧李青 抓住敌方英雄 && 迅捷斥候提姆有大招-----------------
01-15 16:32:18.946 15367-15367/com.wdp.designtest I/盲僧李青: ----------------盲僧李青 把敌人扔给下个英雄-----------------
01-15 16:32:18.946 15367-15367/com.wdp.designtest I/德邦赵信: ----------------德邦赵信 抓住敌方英雄 && 迅捷斥候提姆有大招-----------------
01-15 16:32:18.946 15367-15367/com.wdp.designtest I/德邦赵信: ----------------德邦赵信 把敌人扔给下个英雄-----------------
01-15 16:32:18.946 15367-15367/com.wdp.designtest I/迅捷斥候提姆: ----------------迅捷斥候提姆 抓住敌方英雄 && 迅捷斥候提姆有大招-----------------
01-15 16:32:18.946 15367-15367/com.wdp.designtest I/迅捷斥候提姆: ---------------- 迅捷斥候提姆 释放大招-----------------
01-15 16:32:18.946 15367-15367/com.wdp.designtest I/responsibilityChain: ****************第二局****************
01-15 16:32:18.946 15367-15367/com.wdp.designtest I/德邦赵信: ----------------德邦赵信 抓住敌方英雄 && 盲僧李青有大招-----------------
01-15 16:32:18.946 15367-15367/com.wdp.designtest I/德邦赵信: ----------------德邦赵信 把敌人扔给下个英雄-----------------
01-15 16:32:18.946 15367-15367/com.wdp.designtest I/迅捷斥候提姆: ----------------迅捷斥候提姆 抓住敌方英雄 && 盲僧李青有大招-----------------
01-15 16:32:18.946 15367-15367/com.wdp.designtest I/迅捷斥候提姆: ----------------迅捷斥候提姆 把敌人扔给下个英雄-----------------
01-15 16:32:18.946 15367-15367/com.wdp.designtest I/盲僧李青: ----------------盲僧李青 抓住敌方英雄 && 盲僧李青有大招-----------------
01-15 16:32:18.946 15367-15367/com.wdp.designtest I/盲僧李青: ---------------- 盲僧李青 释放大招-----------------
01-15 16:32:18.946 15367-15367/com.wdp.designtest I/德邦赵信: ----------------德邦赵信 抓住敌方英雄 && 德邦赵信有大招-----------------
01-15 16:32:18.946 15367-15367/com.wdp.designtest I/德邦赵信: ---------------- 德邦赵信 释放大招-----------------
01-15 16:32:18.946 15367-15367/com.wdp.designtest I/德邦赵信: ----------------德邦赵信 抓住敌方英雄 && 迅捷斥候提姆有大招-----------------
01-15 16:32:18.946 15367-15367/com.wdp.designtest I/德邦赵信: ----------------德邦赵信 把敌人扔给下个英雄-----------------
01-15 16:32:18.946 15367-15367/com.wdp.designtest I/迅捷斥候提姆: ----------------迅捷斥候提姆 抓住敌方英雄 && 迅捷斥候提姆有大招-----------------
01-15 16:32:18.946 15367-15367/com.wdp.designtest I/迅捷斥候提姆: ---------------- 迅捷斥候提姆 释放大招-----------------
01-15 16:32:18.946 15367-15367/com.wdp.designtest I/responsibilityChain: ****************第三局****************
01-15 16:32:18.946 15367-15367/com.wdp.designtest I/迅捷斥候提姆: ----------------迅捷斥候提姆 抓住敌方英雄 && 盲僧李青有大招-----------------
01-15 16:32:18.946 15367-15367/com.wdp.designtest I/迅捷斥候提姆: ----------------迅捷斥候提姆 把敌人扔给下个英雄-----------------
01-15 16:32:18.946 15367-15367/com.wdp.designtest I/盲僧李青: ----------------盲僧李青 抓住敌方英雄 && 盲僧李青有大招-----------------
01-15 16:32:18.946 15367-15367/com.wdp.designtest I/盲僧李青: ---------------- 盲僧李青 释放大招-----------------
01-15 16:32:18.946 15367-15367/com.wdp.designtest I/迅捷斥候提姆: ----------------迅捷斥候提姆 抓住敌方英雄 && 德邦赵信有大招-----------------
01-15 16:32:18.946 15367-15367/com.wdp.designtest I/迅捷斥候提姆: ----------------迅捷斥候提姆 把敌人扔给下个英雄-----------------
01-15 16:32:18.946 15367-15367/com.wdp.designtest I/盲僧李青: ----------------盲僧李青 抓住敌方英雄 && 德邦赵信有大招-----------------
01-15 16:32:18.947 15367-15367/com.wdp.designtest I/盲僧李青: ----------------盲僧李青 把敌人扔给下个英雄-----------------
01-15 16:32:18.947 15367-15367/com.wdp.designtest I/德邦赵信: ----------------德邦赵信 抓住敌方英雄 && 德邦赵信有大招-----------------
01-15 16:32:18.947 15367-15367/com.wdp.designtest I/德邦赵信: ---------------- 德邦赵信 释放大招-----------------
01-15 16:32:18.947 15367-15367/com.wdp.designtest I/迅捷斥候提姆: ----------------迅捷斥候提姆 抓住敌方英雄 && 迅捷斥候提姆有大招-----------------
01-15 16:32:18.947 15367-15367/com.wdp.designtest I/迅捷斥候提姆: ---------------- 迅捷斥候提姆 释放大招-----------------
相关文章推荐
- 设计模式->行为型模式->责任链模式
- 设计模式-责任链模式
- 设计模式之责任链模式(tomcat filters)
- 设计模式—责任链模式
- 24种设计模式--责任链模式【Chain ofResponsibility Pattern】
- python设计模式之责任链模式
- 深入浅出设计模式笔记之十一:责任链模式
- java 设计模式 -- 责任链模式
- 设计模式-责任链模式
- SPRING与设计模式---责任链模式
- 行为型设计模式-责任链模式
- 菜鸟学设计模式----责任链模式
- Java设计模式菜鸟系列(十八)责任链模式建模与实现
- 设计模式之---责任链模式(Chain of Responsibility)
- 设计模式之责任链模式
- Java设计模式--责任链模式
- Groovy 设计模式 -- 责任链模式
- 设计模式之责任链模式
- 8、C语言和设计模式(责任链模式)
- 设计模式--责任链模式(COR)