都说软件世界是现实世界的抽象,现实世界的事物都可以用软件来反应。在软件世界中,有一套解决通用问题的方法,高大上的讲法是:设计模式。
说起设计模式,懂得软件的人,都会肃然起敬,因为它在这个行业一直是犹抱琵琶半遮面,没有程序员敢说:我掌握了它,都只是心虚的说我了解它。
既然软件就是反应现实世界,那么软件中的设计模式也应该是来自于现实世界!今天我们不讲软件世界中的设计模式,因为有太多书讲了,我们来讲讲生活中的设计模式,从另外一个观点来剖析设计模式,希望给程序员一些灵感!
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. 销售部处理不了,转给了采购部;
......
小明一次请来了假,好开心!!!
由于篇幅太长,其他的设计模式有时间再补,希望大家读了之后,可以以另外一个角度理解这羞涩的设计模式。
如果您有兴趣,请关注我的微信公众号,谢谢支持!
版权声明:本文为博主原创文章,未经博主允许不得转载。
分享到:
相关推荐
动物笑谈教学设计 .pdf打包整理.zip
本资以作者从事程序开发的经历著作而成,属于经验之谈,读完定会受益匪浅。
19动物笑谈.ppt
17 动物笑谈.doc
《动物笑谈》.ppt
部编版17 动物笑谈.doc
七年级语文上册 第五单元 第17课(动物笑谈)测试 新人教版 试题.doc
19.动物笑谈
19--动物笑谈
以疑自读,助推深度学习——以“动物笑谈”教学为例.pdf
水墨风笑谈演说PPT模板.ppt
初中语文文摘社会笑谈“干部”
部编版17 《动物笑谈》.doc
笑谈演说,中国风水墨ppt模板,九逸作品
皇帝的午餐:笑谈棘轮效应.docx
此作品想从一种新的角度和新的表现形式来阐述自己对演示的一些体会和看法。 我有意识地制作设计PPT的时间只有半年左右,囿于水平,某些观点会有些偏颇与不正。还请诸位专家评审不吝赐教。 既是笑谈,那么其他看官...
ERP经典笑谈-傻瓜图讲ERP
笑谈演说-水墨中国风PPT模板.ppt
斗狠的公鸡:笑谈负和博弈.docx
七年级语文动物笑谈PPT学习教案.pptx