笑谈设计模式(第二篇)
来源:互联网 发布:money for mac 破解版 编辑:程序博客网 时间:2024/06/10 07:05
上一篇,已经讲了七个常用的设计模式!今天我们从第八个开始说起。
8. 装饰者模式(对原有对象功能的扩展或者减少)
小明由于前台做的好,后来转为公司销售,销售岗位每月都要给老大报告业绩。这个是极为头疼的事情。搞不好就会被骂.....
以往小明都是直接跟老大汇报:我这个月只签个10W的单!结果往往注定:……%¥%!@¥#¥
这个月,小明学会了装饰者模式,他是这样汇报给老大的:
1. 老大,这个月市场不景气,XX公司的顶级销售才签了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的单;
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
- 笑谈设计模式(第二篇)
- 笑谈设计模式(第三篇)
- 笑谈设计模式(尾篇)
- 笑谈设计模式(第一篇)
- 黑马程序员-笑谈设计模式
- 设计模式那些事儿之笑谈Singleton模式
- 设计模式之代理模式(第二篇)
- 第二篇 设计模式--工厂方法模式
- 第二十四篇 设计模式--备忘录模式
- 第二十五篇 设计模式--迭代器模式
- IOS设计模式第二篇之单例设计模式
- 设计模式第二篇-单例设计模式
- 《设计模式》第二章
- 笑谈web (转)
- (015)笑谈ViewPager
- 笑谈
- 笑谈
- 设计模式_第二篇_策略模式
- First calibration example - Corner extraction, calibration, additional tools (三)
- ORACLE优化器RBO与CBO介绍总结
- 【万里征程——Windows App开发】ListView&GridView之添加数据
- Matlab处理图像的一般方法
- 南阳理工oj252 数位dp
- 笑谈设计模式(第二篇)
- Search in Rotated Sorted Array解题报告
- C++ 简单实现压栈出栈
- First calibration example - Corner extraction, calibration, additional tools (二)
- Reverse Rot Contest2073 - 湖南多校对抗赛(2015.04.06)G
- 稀疏的好處
- First calibration example - Corner extraction, calibration, additional tools(一)
- 《Python核心编程》第八章练习解析
- 网购秒杀系统的设计