笑谈设计模式(第二篇)

来源:互联网 发布:money for mac 破解版 编辑:程序博客网 时间:2024/06/10 07:05


上一篇,已经讲了七个常用的设计模式!今天我们从第八个开始说起。

8. 装饰者模式(对原有对象功能的扩展或者减少)
小明由于前台做的好,后来转为公司销售,销售岗位每月都要给老大报告业绩。这个是极为头疼的事情。搞不好就会被骂.....
以往小明都是直接跟老大汇报:我这个月只签个10W的单!结果往往注定:……%¥%!@¥#¥
这个月,小明学会了装饰者模式,他是这样汇报给老大的:
1. 老大,这个月市场不景气,XX公司的顶级销售才签了10W的单;
2. 和往月一样报告业绩:我这个月签了8W的单!
结果,小明被重重表扬,业绩已经直追XX公司顶级销售!
装饰者模式,在不改变原有架构的基础上,进行功能的扩展或者减少。

9. 策略模式(执行就可以,不需要知道是什么)
三国时代,孙权邀刘备到江东做客,顺便把自己妹妹许配给刘备。明为做客,实为软禁。出发之前,诸葛亮给赵云三个锦囊,告知赵云:危机时刻打开执行即可。最后在诸葛亮的三个锦囊帮助下,刘备顺利返家,还白捡一老婆。这就是著名的赔了夫人又折兵!
从模式的观点看待这个故事:赵云只拥有锦囊,但并不知道锦囊的具体内容,他只需要执行即可。完美实现了执行者和策略的解耦。

10. 适配器模式(电源适配器)
这个连故事都不用讲,生活中经常遇到:笔记本的电源适配器。
当系统之间对接时,系统A的员工对象和系统B的员工不太一样,使用适配器转换即可。

11. 迭代器模式
该模式在Java1.4之前有用,而在1.5中,java引入了泛型,该模式就用的非常少了,忽略了吧。

12. 组合模式(组合对象和单个对象是一样的:树结构)
小明从销售又转到了财务部门,老板发下命令:统计这个月公司各个部门的薪资支出以及负责人信息,小明苦思冥想,决定使用组合模式。
1. 统一主管和普通职员都称为员工,具有员工的所有属性。(薪资,姓名...)
2. 为主管单独添加下属员工
这样就可以把主管(单个对象+下属员工)和 职员当成一种事物进行处理。需要统计部门的薪资支出,只需要统计主管以及下属员工的薪资汇总即可。

13. 观察者模式(有事我通知你,不要找我)
这个模式大名鼎鼎。又称为发布订阅者模式。由于这个原理很简单,就不多讲了。今天我们用JavaScript来演示下这个模式。
$('#ID').on('DataChange',function(){});//注册事件,可以在任何地方,以及多次注册事件
$('#ID').trigger('DataChange'); 触发事件,调用所有的注册事件

14. 门面模式(暴露一个接口即够了)
大家去政府办事都有深刻的感受,通常一件事情,需要找不同的几个部门,有时候顺序不对也不行。如果用门面模式改造,办事流程就成了如下:
1. 去对应的政府部门;
2. 窗口递交相关资料即可;
即一件事情,只暴露一个窗口,至于多复杂,内部处理即可。

15. 备忘录模式(事务回滚)
都说人生没有后悔药!而备忘录模式就是软件世界的后悔药。在某一时刻记录某个数据的状态,特定条件下进行回滚。

16. 访问者模式(在访问者中增加被访问者的接口)
小明又从财务部门转到人事部门,刚转人事岗位的时候比较烦,因为很多新员工入职,都会找他索要员工守则,以及员工文化这类杂七杂八的文档。他都需要一一回应,因为这些文档资料是在他个人的小密室里,别人不能随便进入他的小密室中。这浪费了大量的时间和精力。
最近,他应用了访问者模式,大大节省了他的时间和精力,来看看他是如何应用的
1.他把他的小密室开放出来,完全开放给所有员工;
2.有员工需要文档,直接去小密室,完全不需要浪费时间和精力;
被访者(小密室)开放出来之后,访问者(新员工)直接操作被访问者。这个模式带来的问题是: 新员工会把小密室搞得乱七八糟!!

本次所说的涉及模式,大家主要关注【观察者模式】,无论在Java中,还是在JavaScript中,运用得当都将给架构带来无穷的益处。







上一篇,已经讲了七个常用的设计模式!今天我们从第八个开始说起。

8. 装饰者模式(对原有对象功能的扩展或者减少)
小明由于前台做的好,后来转为公司销售,销售岗位每月都要给老大报告业绩。这个是极为头疼的事情。搞不好就会被骂.....
以往小明都是直接跟老大汇报:我这个月只签个10W的单!结果往往注定:……%¥%!@¥#¥
这个月,小明学会了装饰者模式,他是这样汇报给老大的:
1. 老大,这个月市场不景气,XX公司的顶级销售才签了10W的单;
2. 和往月一样报告业绩:我这个月签了8W的单!
结果,小明被重重表扬,业绩已经直追XX公司顶级销售!
装饰者模式,在不改变原有架构的基础上,进行功能的扩展或者减少。

9. 策略模式(执行就可以,不需要知道是什么)
三国时代,孙权邀刘备到江东做客,顺便把自己妹妹许配给刘备。明为做客,实为软禁。出发之前,诸葛亮给赵云三个锦囊,告知赵云:危机时刻打开执行即可。最后在诸葛亮的三个锦囊帮助下,刘备顺利返家,还白捡一老婆。这就是著名的赔了夫人又折兵!
从模式的观点看待这个故事:赵云只拥有锦囊,但并不知道锦囊的具体内容,他只需要执行即可。完美实现了执行者和策略的解耦。

10. 适配器模式(电源适配器)
这个连故事都不用讲,生活中经常遇到:笔记本的电源适配器。
当系统之间对接时,系统A的员工对象和系统B的员工不太一样,使用适配器转换即可。

11. 迭代器模式
该模式在Java1.4之前有用,而在1.5中,java引入了泛型,该模式就用的非常少了,忽略了吧。

12. 组合模式(组合对象和单个对象是一样的:树结构)
小明从销售又转到了财务部门,老板发下命令:统计这个月公司各个部门的薪资支出以及负责人信息,小明苦思冥想,决定使用组合模式。
1. 统一主管和普通职员都称为员工,具有员工的所有属性。(薪资,姓名...)
2. 为主管单独添加下属员工
这样就可以把主管(单个对象+下属员工)和 职员当成一种事物进行处理。需要统计部门的薪资支出,只需要统计主管以及下属员工的薪资汇总即可。

13. 观察者模式(有事我通知你,不要找我)
这个模式大名鼎鼎。又称为发布订阅者模式。由于这个原理很简单,就不多讲了。今天我们用JavaScript来演示下这个模式。
$('#ID').on('DataChange',function(){});//注册事件,可以在任何地方,以及多次注册事件
$('#ID').trigger('DataChange'); 触发事件,调用所有的注册事件

14. 门面模式(暴露一个接口即够了)
大家去政府办事都有深刻的感受,通常一件事情,需要找不同的几个部门,有时候顺序不对也不行。如果用门面模式改造,办事流程就成了如下:
1. 去对应的政府部门;
2. 窗口递交相关资料即可;
即一件事情,只暴露一个窗口,至于多复杂,内部处理即可。

15. 备忘录模式(事务回滚)
都说人生没有后悔药!而备忘录模式就是软件世界的后悔药。在某一时刻记录某个数据的状态,特定条件下进行回滚。

16. 访问者模式(在访问者中增加被访问者的接口)
小明又从财务部门转到人事部门,刚转人事岗位的时候比较烦,因为很多新员工入职,都会找他索要员工守则,以及员工文化这类杂七杂八的文档。他都需要一一回应,因为这些文档资料是在他个人的小密室里,别人不能随便进入他的小密室中。这浪费了大量的时间和精力。
最近,他应用了访问者模式,大大节省了他的时间和精力,来看看他是如何应用的
1.他把他的小密室开放出来,完全开放给所有员工;
2.有员工需要文档,直接去小密室,完全不需要浪费时间和精力;
被访者(小密室)开放出来之后,访问者(新员工)直接操作被访问者。这个模式带来的问题是: 新员工会把小密室搞得乱七八糟!!

本次所说的涉及模式,大家主要关注【观察者模式】,无论在Java中,还是在JavaScript中,运用得当都将给架构带来无穷的益处。







1 0
原创粉丝点击