- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
设计模式初学者指南
设计模式初学者指南
薛晖
Good cooking takes time. If you are made to wait, it is to serve you better, and to please you.
美酒的酿造需要年头,美食的烹调需要时间;片刻等待,更多美味,更多享受。
—— 《人月神话》
写在前面
本文的内容主要来源于前段时间的部门分享,经过整理、修订与完善后,现分享给各位,祝开卷有益。
欢迎来到模式的世界
且慢,我们为什么需要模式?大学里开发“Hello World”我们用到了模式吗?在GOF的设计模式之前设计的程序难道都不是好的程序吗?
王尔德曾说,百折不挠的决心若与科学法则相抵触,犹如江心补漏劳而无益。若想翘起地球,必先懂得杠杆原理和使用规律。当然哲学上来说,一切规律都是相对静止而绝对变化的,因此那些较为稳定、变化不那么频繁的规律更是我们追求的目标,毕竟,大家都想要掌握一些一劳永逸的东西。
有兴趣的您不妨去看看《IT十大死对头》这篇文章,里面讲述了Linux单挑Windows以及Google对抗所有人等等,但传达给我们开发人员的精神只有一点,就是目下技术日新月异懂的程度堪比摩尔定律。尽管我们不提倡重新发明轮子,但是谁也不知道下一个轮子是谁发明的,并且不同“厂家”的轮子使用起来总会有一点差异;因此抛开具体的轮子不说,较为理想的是我们能够从宏观(设计模式角度)上掌握轮子的适用场景、改进它的使用方法等,或是能够从微观(算法角度)上了解轮子的具体结构、工作原理甚至DIY。
好了,你已经知道设计模式是一种相对稳定、适于宏观把握的规律,那么使用设计模式究竟有什么好处呢?有些文章将鼓吹设计模式无所不能,在我看来,设计模式主要有两个好处:
以经验复用替代代码复用
一切皆可复用!技术复用范畴很广,由低到高分别包括设计复用、组件复用、类库复用、代码复用,而设计模式提供了的“经验复用”,则是最高层次的复用。GOF《设计模式》所做的就是总结了面向对象设计中最有价值的经验,并且用简洁且可复用的形式表达出来。
共享词汇的威力
假设去肯德基吃东西,你可能会对负责点餐的服务员说:
给我一对用黑胡椒和新奥尔良秘制酱烤制的鸡翅,一个北京风味的、包含鸡肉、胡萝卜、黄瓜的特大春卷,一份夹了炸鸡腿、色拉酱和蔬菜的面包,一杯350ml的、加了冰块的百事可乐,另外把土豆打碎放在杯子里给我 @¥#%!¥
当然,服务员小姐很有礼貌的说:重复一遍,您要的是一对新奥尔良烤翅、一份老北京鸡肉卷、一个田园脆鸡堡、一杯中可乐还有一份土豆泥,对吗?
得到你的默许之后,她又会对后面负责送餐的小弟说:9527,这边来一对烤翅、一份老北、一个田园、一杯中可、一杯泥。
同样的意思源自于不同的表述,这就是人类语言的魅力;但现实中往往存在的是,哪怕是略微的表述不同也会造成别人极大的误解,那是沟通的陷阱。为了解决这个问题,各行各业产生了形形色色的“行话”,它们不仅将纷繁复杂的语言精炼化,还最大程度上避免了误解的产生。如果你认为肯德基点餐这个例子离软件设计太远的话,请看下面无间道的例子:
华仔:我建立了一个专门对付琛哥监视类。它能够联系所有的探员,而且任何时候只要韩琛有轻举妄动,它就会通知每个人。最棒的是,任何警员都可以随时加入或退出这套系统。这样的设计可谓相当的面向对象
伟仔:华仔,只要你说用了“观察者模式”,我就懂了
总得来说,共享词汇具有如下作用:
用更少的词汇作更充分的沟通
避免误解
在设计阶段,尽可能停留在设计层次,而排除编码阶段的影响
帮助初级开发人员迅速成长
既然你已经了解了共享词汇的威力,以后碰到“张口闭口模式”的人,千万不要武断地以为他是在炫耀或是显摆,有可能他在他的圈子里已经习惯于共享词汇了?
策略模式???????????????????????????????????????? 上兵伐谋,其次供交,其次伐兵,其下攻城。—— 孙子
在讲解策略模式的定义之前,请看下面的需求:
全聚德烤鸭集团需要一个可以展示他们可爱鸭子的平台,希望用户可以通过这个可视化的平台“亲眼”看到全聚德的鸭子游泳或是呱呱叫,以此来提升他们低迷的股价。他们最重要的需求就是这个平台要有较强的灵活性和扩展性,因为现有情况表明,没有任何预算可以支付任何升级或重构的费用。
让我们先来看看第一个“面向对象”的设计方案(继承):
所有的鸭子都既会呱呱叫(quack),也会游泳(swim),所以这一部分的代码由超类(Duck)负责实现。但每一种鸭子的外观都是不同的,所以Duck类中的Display方法是抽象的,将其具体实现延迟到子类(MallardDuck、RedheadDuck)中去。
正当一切看起来都很好的时候,新的需求来了。由于金融海啸的影响,全聚德公司的竞争压力骤增;在为期一周的头
您可能关注的文档
最近下载
- 医师访谈记录.pdf VIP
- Unit 4 School Life 第3-4课时Reading and Rriting 课件 中职高一学年英语高教版基础模块1.ppt
- 最新中药饮片质量标准通则(试行).doc VIP
- 医学临床三基(输血学)-输血免疫学基础(精选试题).pptx VIP
- 我们的大脑的教学课件.ppt VIP
- 洞察世间智慧:哲学伴随我成长课件.ppt VIP
- 超星网课《汽车之旅》超星尔雅答案2023章节测验答案.doc VIP
- 老年人继承法培训课件.pptx VIP
- 科学湘科版二年级上册全册课件.pptx
- 第7课全球航路的开辟和欧洲早期殖民扩张【中职专用】《世界历史》(高教版2023基础模块).pptx VIP
文档评论(0)