`
aric_chen
  • 浏览: 8954 次
文章分类
社区版块
存档分类
最新评论

笑谈设计模式(第一篇)

 
阅读更多

都说软件世界是现实世界的抽象,现实世界的事物都可以用软件来反应。在软件世界中,有一套解决通用问题的方法,高大上的讲法是:设计模式。

说起设计模式,懂得软件的人,都会肃然起敬,因为它在这个行业一直是犹抱琵琶半遮面,没有程序员敢说:我掌握了它,都只是心虚的说我了解它。

既然软件就是反应现实世界,那么软件中的设计模式也应该是来自于现实世界!今天我们不讲软件世界中的设计模式,因为有太多书讲了,我们来讲讲生活中的设计模式,从另外一个观点来剖析设计模式,希望给程序员一些灵感!

1. 单例模式(只能有一个,且可以复用)
在中国,一个成年男子只能有一个妻子(只能有一个),但在她成为你的妻子之前,你需要追求,买花,搞定她父母,买房...(新建实例很浪费内存呀)!成为你的妻子后(实例创建成功),你就可以今天让她洗衣服做饭,明天让她做饭洗衣服....(实现了复用)!
如果每天是你在洗衣服做饭,而不是你妻子,在计算机世界里叫: 出现了异常!!
有人会问,有小三怎么讲??计算机里专业名词:由于多线程导致创建了多个实例,线程不安全呀!!如果出现了17个女朋友,说明软件在高并发状态下运行!

2. 工厂模式 (统一制造)
今天想吃麻婆豆腐,想起制作麻婆豆腐的流程:买豆腐,辣椒,开火,放油......这么多流程,瞬间不想吃了有木有!!如果说,我说如果....
亲爱的,来一份麻婆豆腐!

再来一份...
再来一份...
再来一份...
好清爽,有么有!!根本不用关心制造的过程,统一制造!
叫的太多,万一被打,或者跪搓衣板,这不是工厂模式的错误!!!!

3. 建设者模式 (统一制造,统一配置)
亲爱的,麻婆豆腐做好之后,上面放点香菜,香油,谢谢。 对创建出来的实例,进行额外的统一配置。

4.代理模式 (AOP,面向切面编程)
代理模式分为静态代理和动态代理。
先来讲讲静态代理,静态代理是显式操作,需要有代理类,讲个现实中的例子吧
1. 小明是一名公司前台,他在主要职责是负责接待客户。他每天接待客户1,客户2,客户3........
2. 有一天,老板想:小明你能不能接待客户之前,先把客户的样子画下来?客户走之后,标识下每个画像的名字?
3. 小明说:画个毛线,我又不会画画,逼我,我炒了你鱿鱼
4. 于是老板委派了小张过来画像, 每次客户来之前(切入点),画下客户的画像(切入事件),告知小明接待,走以后(切入点),标识名字(切入事件)
大家可以看出,静态代理是主动的,小张代理了小明,然后主动通知小明来接待。大家有没有觉得小张好累,做完事情还要通知小明......来看看动态代理怎么实现的。
1. 小张觉得太TMD麻烦了,每次通知小明,小明又经常上厕所,找不到人。怎么办。
2. 小张蹲主动蹲在电梯口,看到客户来(切入点),直接画像....
3. 小明不知道小张的存在,继续接待客户,你好,欢迎来到。。。
4. 小张发现客户走了(切入点),标记姓名。
5. 小明心想:小张TMD的不来上班,投诉他去....
静态代理使用的几率较少,动态代理是Spring的基础即:AOP。在做设计的时候,一开始不用关心Log,事务,整体功能完成之后,直接加入动态代理,即可实现。有木有很NB的样子?

5. 中介者模式 (每天和好多人打交道,好烦人...)
小明在超市卖馒头(小明打破了老板的杯子,被迫离职,卖馒头去了....)
1. 小明卖出去了10个馒头,告诉了库存主管:我卖了10个,更新下库存
2. 库存主管告诉了馒头师傅,馒头不够了
3. 馒头师傅告诉小明,我已经蒸了几个,你可以继续卖。
4. 小明告诉库存主管:馒头师傅呢,又生产了馒头,赶紧更新库存
.........
这是一个满满的三角恋,小明好累,这时候小张出现了。小张说:
小明呀, 馒头卖出去了,告诉我,我来通知所有人
库存老大,馒头不够了,告诉我....
馒头师傅,馒头蒸好了,告诉我.....
一下子,小明好轻松!!!
如果你的项目中类出现了三角恋,请考虑使用中介来管理。

6. 命令模式 (只对一个人下命令)
小明开公司了!!!!(馒头卖的不错,赚了第一桶金,开起了软件公司)
小明很开心,我是BOSS,欧耶,我要做一个全世界最NB的软件!!
1. 叫来员工小陈:那个你是画图的是吧,给我画一张蒙娜丽莎,我要在软件中用。小陈很开心,BOSS亲自临幸我,不对,是用我,是对我的看重;
2. 叫来小刘,你是写页面的是吧,给我做一个巴拉巴拉NB的页面,能够配上蒙娜丽莎那个Level的;
.......
有一天,公司壮大,增加了100多个人,曾经的小张小刘都离职了。小明又想画蒙娜丽莎..... 虽然是老板,可是公司人都不认得呀。小明找呀找,也不知道谁负责什么。这时候小明发火了。找来公司元老小张,你找人给我画图,给我画页面,小张什么都不做,把命令传递给美工,传递给UI设计师。
只对一个类下命令,而命令的执行者是不知道下命令人的存在。

7. 责任链模式(你处理不了,交给下一步)
小明破产了,又去当前台了。小明最近生病了,要请假,请假流程是这样的:
1. 跟人事请假,人事说你不属于我管,你属于销售部管,找销售部;
2. 跟销售部请假,销售部说,她们把你转到了采购部.....;
3.小明去找采购部,采购部说还没接收你,你只能找老板;
4. 小明TMD的郁闷了。。。;
公司上了责任链模式:
小明又请假了....
1. 人事处理不了,转给了销售部;
2. 销售部处理不了,转给了采购部;
......
小明一次请来了假,好开心!!!

由于篇幅太长,其他的设计模式有时间再补,希望大家读了之后,可以以另外一个角度理解这羞涩的设计模式。

如果您有兴趣,请关注我的微信公众号,谢谢支持!



版权声明:本文为博主原创文章,未经博主允许不得转载。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics