前言:寒假在家昼夜不分疯狂地看了一个星期,一口气看完《Head First Design Patterns》,感觉还是意犹未尽。尤其是对最后一章一笔带过的9个模式感觉遗憾万分。于是再次把玩了一番整部书,把散落在其中的金子收集到一处,并记下自己的看法,以供以后欣赏~
模式的定义
模式:在某情境下,针对某问题的某种解决方案。
情境:应用某个模式的情况。这应该是不断重复出现的情况。
问题:你想在某情境下达到的目标,但也可以是某情境下的约束。
解决方案:这是我们的目标。一个通用的设计,用来解决约束,达到目标。
通俗版本:如果你发现自己处于某个情境下,面对着所欲达到的目标被一群约束影响着的问题,然而,你能够应用某个设计,克服这些约束并达到该目标,将你领向某个解决方案。
设计模式和我崇拜的武术
在我看来,“模式”就像武侠小说里的,大侠们使的武功招式(一个模式对应一种武功招式):
就是因为有了武功招式,才让专业习武者和市井流氓打架时的拳打脚踢区分开来;
同理,设计模式等专业术语也让专业软件设计师和业余编程爱好者有了本质区别。武功招式普遍都有一些很响亮的名字,比如太极里的“白鹤亮翅”;
同样,每个设计模式都有一个形象贴切的名字,像“观察者模式”。武功招式,都是由最基本的拳、掌、钩等(或者剑术的刺、劈等)基本招式组成,并以各门各派的“内功心法”为指导,形成能够强身健体、修身养性的招数;
设计模式,同样是由最基本的基础元素:抽象、封装、多台、继承组成,并合理遵循贯彻Object-Oriented设计原则,产生富有弹性的类图结构和设计框架。武功招式会被滥用,初学者做起事情来,处处都是有头有脸的招式,在木板上订枚钉子,好好的榔头不用,非要用什么一阳指、千斤坠;
设计模式同样会有如此尴尬,初学者“为了用设计模式而用设计模式”,甚至扬言写个Hello World也要用设计模式,这时候就病入膏肓了。《笑傲江湖》中,风清扬教令狐冲“独孤九剑”的时候,倾囊相授之后要他尽数忘记。以后在比剑的过程中随心所欲,想起那一招就使出哪一招。
悟道(编程之道)者的心智能够看到模式在何处能够自然融入,不必去思考这个地方用“策略模式”好还是用“模板方法模式”好,一切顺其自然。武学的一种高境界,是无招胜有招,因为但凡是招式,就有其弱点,能被相克的招式破解,而且并不是人人都能练好这一招一式;
编程亦是如此,每个模式虽然威力强劲,但都是比较复杂的实现方式,而且各自都有相对的适用范围和使用后果(好的或坏的)。学习武功招式,最美妙的地方就是能和其他习武者一起切磋改进,还能相互学习;
设计模式的绝顶妙处也是让你和其他设计者有共同语言,并且不用重复制造车轮。武学宗师能够自创武功;
设计大师同样挖掘模式。武功有欣赏价值;
设计有艺术气息。
Object-Oriented设计原则
封装变化(Page 9)
针对接口编程,不针对实现编程(Page 11)
多用组合,少用继承(Page 23)
松散耦合原则(Page 53)
开闭原则(Page 86)
依赖倒置原则(Page 139)
最少知识原则(Page 265)
好莱坞原则(Page 296)
单一责任原则(Page 339)
我将分逐章详细讨论这九条原则。
评论
发表评论