设计模式—— 十六 :责任链模式( 四 )


public class Son extends Handler {// 儿子只处理母亲的请求public Son() {super(Handler.SON_LEVEL_REQUEST);}// 儿子的答复protected void response(IWomen women) {System.out.println("--------母亲向儿子请示-------");System.out.println(women.getRequest());System.out.println("儿子的答复是:同意\n");}}
public class Women implements IWomen {/*** 通过一个int类型的参数来描述妇女的个人状况 1--未出嫁 * 2--出嫁 * 3--夫死*/private int type = 0;// 妇女的请示private String request = "";// 构造函数传递过来请求public Women(int _type, String _request) {this.type = _type; // 为了便于显示 , 在这里做了点处理switch (this.type) {case 1:this.request = "女儿的请求是:" + _request;break;case 2:this.request = "妻子的请求是:" + _request;break;case 3:this.request = "母亲的请求是:" + _request;}}// 获得自己的状况public int getType() {return this.type;}// 获得妇女的请求public String getRequest() {return this.request;}}
public class Client {public static void main(String[] args) {// 随机挑选几个女性Random rand = new Random();ArrayList arrayList = new ArrayList();for (int i = 0; i < 5; i++) {arrayList.add(new Women(rand.nextInt(4), "我要看戏"));}// 定义三个请示对象Handler father = new Father();Handler husband = new Husband();Handler son = new Son();// 设置请示顺序father.setNext(husband);husband.setNext(son);for (IWomen women : arrayList) {father.HandleMessage(women);}}}
在中设置请求的传递顺序 , 先向父亲请示 , 不是父亲应该解决的问题 , 则由父亲 传递到丈夫类解决 , 若不是丈夫类解决的问题则传递到儿子类解决 , 最终的结果必然有一个 返回 , 其运行结果如下所示:
业务调用类不用再去做判断到底是需要谁去处理 , 而且抽象类的子类可以继续增加下去 , 只需要扩展传递链而已 , 调用类可以不用了解变化过程 , 甚至是谁在处理这个请求都不用知道 。
责任链模式优缺点 责任链模式优点责任链模式缺点
责任链模式应用场景
在以下情况下可以考虑使用职责链模式:
?? 设计模式—— 十五 :命令模式
?? 设计模式—— 十七:装饰器模式
参考:
【1】:《设计模式之禅》
【2】:《--java》
【设计模式—— 十六 :责任链模式】【3】:《研磨设计模式》