刚开始接触面向对象编程的时候觉得封装是它最大的优点,毕竟相对于面向过程编程来 说,数据和操作数据的行为封装在一起给人耳目一新的感觉。随着编程经验和阅历的增长, 我开始觉得继承和多态才是面向对象最大的优势,运行时绑定的魔力太过于惊人。后来 我去看了设计模式,我又觉得组合才是面向对象编程的精髓之所在,面向接口而不面向 实现编程才是复用的王道。我知道有一天当我功力渐长之后,回过头来想这个问题的时候我 还会有新的看法,我也期待那一天快点到来。
关于这本书的翻译
这本书的中文版参与翻译的人非常的多,结果就是质量参差不齐。总体感觉结构模式和行为 模式两个章节要比创建模式一章翻译的到位一些。不过瑕不掩瑜,这本书的翻译还算是可以 的,个人推荐在看中文译本的时候备一本英文原本,这样你可以在不通顺的地方那个参考英 文原本,了解作者的原意。
三思而后行
读完这本书之后,我突然想起了《Effective C++》中的一个条款:考虑虚函数之外的其他 选择。其实一个问题通常都会又非常的多的解法可供选择,而大部分的时候,我们想都没想 就选择了虚函数,因为它通常比其他的方式要简单许多。
设计模式是一个问题较为灵活的解法,同时它也是这个问题较为复杂的解法。原来的我在编 程的时候重来不做设计,总是跟随自己的惰性,选择一种目前最简单的实现方式。其实这种 方式不一定就是不对的,只是在没有考虑过其他解法的时候就决定使用这种方式的做法是不 可取的。我们会满足与目前不优雅的解决方式的原因,是我们还不知道有更优雅的解决 方式。
读完这本书,我最想对自己说:三思而后行。在做任何一个你觉得理所当然的决定的时候, 先考虑一下,你是否还有其他更加合理的选择。
温故而知新
设计模式是经验的总结,温故而知新,这是一种能力,更是我们需要学习的做事的态度。当 今的软件界,更像是一个共产主义时代,基本上你能够想到的任何的软件都已经有相关的开 源项目。学习那些优秀的开源软件是进步的绝佳途径,就像《黑客于画家》中说到的,只有 通过不断的临摹和观察大师的作品,我们才有可能会成为真正的大师。
此外总结也是非常非常重要的,把别人精湛的技巧内化成自己功力的一部分才有可能真正的 进步,学了忘、忘了学的循环只是在浪费自己的时间而已。
间接性
这本书提到了 23 个模式,几乎所有的模式都是某种程度的间接操作,这就像是软件开发的 至理名言:任何问题都可以引入中间层来解决。也许有一天我们可以通过引入间接的操作来 解决设计模式中没有告诉我们解法的问题,或许有一天我们可以创造自己的设计模式。
模式感悟
我一直觉得读书在于感悟,读《设计模式》这本书,我有非常多的感悟,我在书上写了密密 麻麻的各种笔记。正如作者所言,没有人会在第一遍看这本书的时候就读懂所有的内容,我 相信自己现在自以为是对作者观点的注解的各种笔记都可能是对于作者的观点的曲解。所以 我不打算把自己对于具体的每一个模式的感悟写在这里,这是一本需要反复的读的书,一千 个人眼中有一千个哈姆雷特,希望看到这篇文章的你能自己在这本书中读到自己的感悟。