设计模式,可能是每一个程序员都绕不过去的话题,有人认为特别重要,有人对其嗤之以鼻,也有人并不是很确定它的重要性。为什么要学习设计模式,这么多年以来其实我也没有看到一个很好的回答,前一阵在Youtube看到一个讲Android系统开发的youtuber的主页,发现他的一篇很短的文章探讨了这个问题,看完后感觉醍醐灌顶,因此有冲动翻译并记录下其主要的观点。
编程如下棋,一个新手刚开始接触时,首先要了解能够正常下棋的要素,如棋子,棋盘,要熟悉棋子移动,吃子,将军的规则,等这些都了解了以后,就可以正常下棋了,虽然可能下的不好,但是渐渐的,开始领会一些这个游戏的基本规律,如何占取优势,如何使用策略,通过一次次的棋局,逐步的识别出一些可能是很愚蠢的错误,并在以后的棋局中尽量避免,一个新手也可能下棋下的越来越好。
但是一个人如果想成为下棋的大师,却需要学习大师们所下过的棋局。隐藏在这些棋局中的模式必须通过理解,记忆,反复应用,最后成为一个人的本能。这些模式可能是成千上万的,开放模式更是繁多,以至于有很多关于其变化的书籍。 游戏中模式和结束模式也很普遍,作为大师们必须熟悉它们。
编程也一样,首先学习规则,学习算法,数据结构,熟悉了这些后就可以编程了,尽管所写的代码会比较蹩脚。之后,开始学习软件设计的原则,如结构化编程,模块化编程,面向对象编程,如高内聚低耦合的重要性,如信息隐藏和依赖管理。等这些都学习了以后,一个人要想成为真正的编程大师,还是需要学习大师们的设计,并深入这些设计,举一反三,这些模式必须被理解,记忆,反复应用,最后成为一个人的本能。
这篇文章本来就很短,但是我依旧要提炼出本文要划重点的句子:
一个人要想成为真正的编程大师,还是需要学习大师们的设计,并深入这些设计,举一反三,这些模式必须被理解,记忆,反复应用,最后成为一个人的本能。