儿子类只能处理等级为3的请示 。
public class Son extends Handler {/*** 儿子只处理母亲的请求*/public Son() {super(Handler.REQUEST_SON);}@Overrideprotected void response(IWomen women) {System.out.println("--------母亲向儿子请示--------");System.out.println(women.getRequest());System.out.println("儿子的答复是:同意");}}
这三个类都很简单,构造方法是必须实现的,父类框定子类必须有一个显式构造函数,子类不实现编译不通过 。通过构造方法我们设置了各个类能处理的请求类型,只能处理请求类型为1(也就是女儿)的请求;只能处理请求类型类为2(也就是妻子)的请求,儿子只能处理请求类型为3(也就是母亲)的请求,那如果请求类型为4的该如何处理呢?在中我们已经判断了,如何没有相应的处理者(也就是没有下一环节),则视为不同意 。
Women类的接口没有任何变化,实现类稍微有些变化 。
public class Women implements IWomen {/*** 妇女状况,1:未出嫁,2:出嫁,3:夫死*/private int type = 0;/*** 妇女的请示*/private String request = "";/*** 构造函数传递过来请求** @param type* @param 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;break;default:break;}}@Overridepublic int getType() {return this.type;}@Overridepublic String getRequest() {return this.request;}}
我们再来看类是怎么描述古代这一个礼节的 。
public class Client {public static void main(String[] args) {//随机挑选几个女性Random random = new Random();ArrayList
在中设置请求的传递顺序,先向父亲请示,不是父亲应该解决的问题,则由父亲传递到丈夫类解决,若不是丈夫类解决的问题则传递到儿子类解决,最终的结果必然有一个返回,其运行结果如下所示 。
--------妻子向丈夫请示--------
妻子的请求是:我要出去逛街
丈夫的答复是:同意
--------妻子向丈夫请示--------
妻子的请求是:我要出去逛街
丈夫的答复是:同意
文章插图
--------妻子向丈夫请示--------
妻子的请求是:我要出去逛街
丈夫的答复是:同意
--------母亲向儿子请示--------
母亲的请求是:我要出去逛街
儿子的答复是:同意
--------女儿向父亲请示--------
女儿的请求是:我要出去逛街
父亲的答复是:同意
结果也正确,业务调用类也不用去做判断到底是需要谁去处理,而且抽象类的子类可以继续增加下去,只需要扩展传递链而已,调用类可以不用了解变化过程,甚至是谁在处理这个请求都不用知道 。在这种模式下,即使现代社会的一个小太妹穿越到古代(例如掉入时空隧道,或者时空突然扭转,甚至是突然魔法显灵),对“三从四德”没有任何了解也可以自由地应付,反正只要请示父亲就可以了,该父亲处理就父亲处理,不该父亲处理就往下传递 。这就是责任链模式 。
2.责任链模式的通用模版
- 学习3d建模达到什么水平能找到工作?次世代游戏建模需要学多久
- 【前端学习笔记day48】7.1
- 干货!吴恩达亲自为这份深度学习专项课程精炼图笔记点了赞!
- 2 Flink源码学习笔记 基于Yarn的自动伸缩容实现
- 不确定理论1
- 斯巴达 Kail学习笔记-kali信息搜集工具之Sparta
- drizzle 和 react 学习
- 常喝咖啡会导致卵巢囊肿吗 每天喝咖啡会导致卵巢囊肿吗
- 第十五章 SPSS Modeler 集成学习算法之同质集成
- 寄存器操作 8、stm32F103入门学习--点亮LED(向库函数操作迈进!)