前 言
本书是一本程序集?NO。
本书是一本故事集?NO。
本书是一本通过故事讲述程序如何设计的方法集。
本书是给连 Hello World 都没写过的非程序员看的书吗?NO。
本书是给玩过穿孔纸带(0/1)、写过汇编、BASIC、C、C++、Delphi、Java、C#等语言,开发过
覆盖全球、使用人数过亿、数百万行代码等大型系统的骨灰级程序员看的书吗?NO。
本书希望能给渴望了解 OO 世界的初学者、困惑于僵硬、脆弱、无法复用的代码编程体验者、
一直打着 OO 编程的旗号,做着过程式开发的基于对象的编程实践者一些好的建议和提示。
本书起因
写本书源于我一次做培训的经历,学生大多是计算机专业的学生或有过一定经验的在职开发者。他
们都知道类、方法、构造方法、甚至抽象类、接口等概念,并用 Visual Studio 写过不少的 Windows 或
Web 程序,可是当我提问为什么要用面向对象,它的好处在哪里时,却没有人能完整地讲得出来,多数
人的反应是,概念知道的,就是表达不清楚。
针对于此,我就举了中国古代的四大发明中活字印刷的例子(见第 1 章),通过一个虚构的三国曹
操做诗的情景,把面向对象的几大好处讲解了一下,学生普遍都感觉通俗易懂,觉得这样的教学比直接
告诉面向对象有什么好处要更加容易理解和记忆。
这就使得我不断地思考这样一个问题,学一门技术是否需要趣味性、通俗性的引导。
我在思考中发现,看小说时,一般情况下我都可以完整地读完它,而阅读技术方面的图书,却很少
有真正的每章每页的仔细阅读。尽管这两者是有很大区别,技术书中可能有不少知识是已经学会或暂时
用不上的内容,但也不得不承认,小说之所以可以坚持读完是因为对它感兴趣,作者的文字吸引你。而
有些技术书的枯燥乏味使得阅读产生了困难,通常读个前几章就留待以后再说了。
技术课的教学同样如此,除非学生是抱着极大的学习动机来参与其中,否则照本宣科的教学、枯燥
乏味的讲解,学生一定会被庞杂的概念和复杂的逻辑搅晕了头脑,致使效果大打折扣。也正因为此,往
往造成部分学生,学了四年的计算机编程,却可能连面向对象有什么好处都还说不清。
为什么不可以让技术书带点趣味性呢,哪怕这些趣味性与所讲的技术并不十分贴切,只要不是影响
技术核心的本质,不产生重大的错误,让读者能轻松阅读它,并且有了一定的了解和感悟,这要比一本
书写得高深无比,却被长期束之高阁要好得多。
也正是这个原因,本人开始了关于设计模式的趣味性写作的尝试。
本书读者
显然本书不是给无任何编程经验的人看的,对于想入这一行的朋友来说,找一门编程语言,从头开