非常简单,有处理权的人对妇女的请求进行处理,分别有三个实现类,在女儿没有出嫁之前父亲是有决定权的 。
public class Father implements IHandler {@Overridepublic void handleMessage(IWomen women) {//未出嫁的女儿来请示父亲System.out.println("女儿的请示是:" + women.getRequest());System.out.println("父亲的答复是:同意");}}
在女性出嫁后,丈夫有决定权 。
public class Husband implements IHandler {@Overridepublic void handleMessage(IWomen women) {//妻子向丈夫请示System.out.println("妻子的请示是:" + women.getRequest());System.out.println("丈夫的答复是:同意");}}
在女性丧偶后,对母亲提出的请求儿子有决定权 。
public class Son implements IHandler {@Overridepublic void handleMessage(IWomen women) {//母亲向儿子请示System.out.println("母亲的请示是:" + women.getRequest());System.out.println("儿子的答复是:同意");}}
上三个实现类非常简单,只有一个方法,处理女儿、妻子、母亲提出的请求,我们来模拟一下一个古代妇女出去逛街是如何请示的 。
public class Client {public static void main(String[] args) {//随机挑选几个女性Random random = new Random();ArrayList
首先是通过随机方法产生了5个古代妇女的对象,然后看她们是如何就逛街这件事去请示的,运行结果如下所示(由于是随机的,您看到的结果可能和这里有所不同):
--------女儿向父亲请示--------
女儿的请示是:我要出去逛街
父亲的答复是:同意
--------母亲向儿子请示--------
母亲的请示是:我要出去逛街
儿子的答复是:同意
--------女儿向父亲请示--------
女儿的请示是:我要出去逛街
父亲的答复是:同意
--------母亲向儿子请示--------
母亲的请示是:我要出去逛街
儿子的答复是:同意
--------妻子向丈夫请示--------
妻子的请示是:我要出去逛街
丈夫的答复是:同意
三从四德”的旧社会规范已经完整地表现出来了,你看谁向谁请示都定义出来了,但是你是不是发现这个程序写得有点不舒服?有点别扭?有点想重构它的感觉?那就对了!这段代码有以下几个问题:
● 职责界定不清晰
对女儿提出的请示,应该在父亲类中做出决定,父亲有责任、有义务处理女儿的请示,因此类应该是知道女儿的请求自己处理,而不是在类中进行组装出来,也就是说原本应该是父亲这个类做的事情抛给了其他类进行处理,不应该是这样的 。
● 代码臃肿
我们在类中写了if...else的判断条件,而且能随着能处理该类型的请示人员越多,if...else的判断就越多,想想看,臃肿的条件判断还怎么有可读性?!
● 耦合过重
这是什么意思呢,我们要根据Women的type来决定使用的那个实现类来处理请求 。有一个问题是:如果的实现类继续扩展怎么办?修改类?与开闭原则违背了!
- 学习3d建模达到什么水平能找到工作?次世代游戏建模需要学多久
- 【前端学习笔记day48】7.1
- 干货!吴恩达亲自为这份深度学习专项课程精炼图笔记点了赞!
- 2 Flink源码学习笔记 基于Yarn的自动伸缩容实现
- 不确定理论1
- 斯巴达 Kail学习笔记-kali信息搜集工具之Sparta
- drizzle 和 react 学习
- 常喝咖啡会导致卵巢囊肿吗 每天喝咖啡会导致卵巢囊肿吗
- 第十五章 SPSS Modeler 集成学习算法之同质集成
- 寄存器操作 8、stm32F103入门学习--点亮LED(向库函数操作迈进!)