,itistoserveyoubetter,,美食的烹调需要时间;片刻等待,更多美味,更多享受。——《人月神话》写在前面本文的内容主要来源于前段时间的部门分享,经过整理、修订与完善后,现分享给各位,祝开卷有益。欢迎来到模式的世界且慢,我们为什么需要模式?大学里开发“HelloWorld”我们用到了模式吗?在GOF的设计模式之前设计的程序难道都不是好的程序吗?王尔德曾说,百折不挠的决心若与科学法则相抵触,犹如江心补漏劳而无益。若想翘起地球,必先懂得杠杆原理和使用规律。当然哲学上来说,一切规律都是相对静止而绝对变化的,因此那些较为稳定、变化不那么频繁的规律更是我们追求的目标,毕竟,大家都想要掌握一些一劳永逸的东西。有兴趣的您不妨去看看《IT十大死对头》这篇文章,里面讲述了Linux单挑Windows以及Google对抗所有人等等,但传达给我们开发人员的精神只有一点,就是目下技术日新月异懂的程度堪比摩尔定律。尽管我们不提倡重新发明轮子,但是谁也不知道下一个轮子是谁发明的,并且不同“厂家”的轮子使用起来总会有一点差异;因此抛开具体的轮子不说,较为理想的是我们能够从宏观(设计模式角度)上掌握轮子的适用场景、改进它的使用方法等,或是能够从微观(算法角度)上了解轮子的具体结构、工作原理甚至DIY。好了,你已经知道设计模式是一种相对稳定、适于宏观把握的规律,那么使用设计模式究竟有什么好处呢?有些文章将鼓吹设计模式无所不能,在我看来,设计模式主要有两个好处:以经验复用替代代码复用一切皆可复用!技术复用范畴很广,由低到高分别包括设计复用、组件复用、类库复用、代码复用,而设计模式提供了的“经验复用”,则是最高层次的复用。GOF《设计模式》所做的就是总结了面向对象设计中最有价值的经验,并且用简洁且可复用的形式表达出来。共享词汇的威力假设去肯德基吃东西,你可能会对负责点餐的服务员说:给我一对用黑胡椒和新奥尔良秘制酱烤制的鸡翅,一个北京风味的、包含鸡肉、胡萝卜、黄瓜的特大春卷,一份夹了炸鸡腿、色拉酱和蔬菜的面包,一杯350ml的、加了冰块的百事可乐,另外把土豆打碎放在杯子里给我@¥#%!¥当然,服务员小姐很有礼貌的说:重复一遍,您要的是一对新奥尔良烤翅、一份老北京鸡肉卷、一个田园脆鸡堡、一杯中可乐还有一份土豆泥,对吗?得到你的默许之后,她又会对后面负责送餐的小弟说:9527,这边来一对烤翅、一份老北、一个田园、一杯中可、一杯泥。同样的意思源自于不同的表述,这就是人类语言的魅力;但现实中往往存在的是,哪怕是略微的表述不同也会造成别人极大的误解,那是沟通的陷阱。为了解决这个问题,各行各业产生了形形色色的“行话”,它们不仅将纷繁复杂的语言精炼化,还最大程度上避免了误解的产生。如果你认为肯德基点餐这个例子离软件设计太远的话,请看下面无间道的例子:华仔:我建立了一个专门对付琛哥监视类。它能够联系所有的探员,而且任何时候只要韩琛有轻举妄动,它就会通知每个人。最棒的是,任何警员都可以随时加入或退出这套系统。这样的设计可谓相当的面向对象伟仔:华仔,只要你说用了“观察者模式”,我就懂了总得来说,共享词汇具有如下作用:用更少的词汇作更充分的沟通避免误解在设计阶段,尽可能停留在设计层次,而排除编码阶段的影响帮助初级开发人员迅速成长既然你已经了解了共享词汇的威力,以后碰到“张口闭口模式”的人,千万不要武断地以为他是在炫耀或是显摆,有可能他在他的圈子里已经习惯于共享词汇了J策略模式 上兵伐谋,其次供交,其次伐兵,其下攻城。——孙子在讲解策略模式的定义之前,请看下面的需求:全聚德烤鸭集团需要一个可以展示他们可爱鸭子的平台,希望用户可以通过这个可视化的平台“亲眼”看到全聚德的鸭子游泳或是呱呱叫,以此来提升他们低迷的股价。他们最重要的需求就是这个平台要有较强的灵活性和扩展性,因为现有情况表明,没有任何预算可以支付任何升级或重构的费用。让我们先来看看第一个“面向对象”的设计方案(继承):所有的鸭子都既会呱呱叫(quack),也会游泳(swim),所以这一部分的代码由超类(Duck)负责实现。但每一种鸭子的外观都是不同的,所以Duck类中的Display方法是抽象的,将其具体实现延迟到子类(MallardDuck、RedheadDuck)中去。正当一切看起来都很好的时候,新的需求来了。由于金融海啸的影响,全聚德公司的竞争压力骤增;在为期一周的头脑风暴会议之后,公司高层决定向潜在的客户展示一些令人印象深刻的元素,来提高公司低迷不振的股价,譬如说展示一些会飞的鸭子……幸好当初我们采用了面向
设计模式初学者指南 来自淘豆网m.daumloan.com转载请标明出处.