您的位置:首页 > 其它

设计模式——责任链模式

2018-01-15 16:32 162 查看
个人理解:

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/迅捷斥候提姆: ---------------- 迅捷斥候提姆 释放大招-----------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: