前言

如同每个人都有其个性一样,每种开发语言也有自己的特点。

项目中,我们固然可以机械地将一种语言的开发经验套用到另一种语言中,但效果不一定好,因为:

●语言有自己的短处:用短处去实现需求不仅费时费力,结果也不理想。

●语言有自己的长处:为了沿用以前的经验而“削足适履”,没有用到语言的精要,结果暴殄天物。

相信读者也发现了,用一种语言写一个应用是一回事,写好一个应用则完全是另一回事,这就是工程化代码和“玩具”代码的区别。教科书上的知识落实到工程上时不能按图索骥,需要考虑开发语言和目标环境,设计模式也不例外。

也许读者会觉得本书中很多实现方式与《设计模式》介绍的内容不一致,这是因为《设计模式》一书出版至今已近20年,其间无论是开发语言还是技术平台均已经“换了人间”。GOF 23个模式的思想不仅影响着我们,更影响着走在技术前沿的语言设计者、平台设计者,他们也在工作中潜移默化地把模式思想融入自己的工作成果,作为用户,我们“推却”别人的盛情,所有事情都从“车轮”做起,多少有点不经济。

作为本系列的Java设计模式分册,我试图用最Java的方式将自己对于设计模式的理解呈献给读者,而且实现上务求简洁、直接。结构上,本书分为5个部分:

(1)第一部分:预备知识

包括面向对象设计原则中“面向类”的部分、Java语言面向对象扩展特性,以及Java和C#语法特性的简单对比。

(2)第二部分:创建型模式

主要介绍如何创建对象,如何将客户程序与创建过程的“变化”有效隔离。

(3)第三部分:结构型模式

从静态结构出发,分析导致类型结构相互依赖的原因,通过将静态变化因素抽象、封装为独立对象的办法,梳理对象结构关系。

(4)第四部分:行为型模式

从动态机制出发,分析导致类型调用过程的依赖因素,通过将调用关系、调用过程抽象、封装为独立对象的方法,削弱调用过程中的耦合关系。

(5)第五部分:GOF综合练习

为了便于读者从整体上体会模式化设计思路和实现技巧,这部分通过一个综合性的示例向读者展示如何发现变化、抽象变化、应用模式并最终结合Java SE平台特性落地实现的过程。

不管之前对于模式是否有所尝试,我希望读者不妨浏览一下这些内容,毕竟模式思想转化为模式设计思路,再转化为模式应用技巧是一个渐进的过程,必须实际动手才会加深印象,然后才可能进一步开阔思路。本章示例设计上变化因素较多,需要三类模式的综合运用,务求能起到抛砖引玉的效果。

感谢多年培养、帮助我的领导和同事们,多年富有挑战、共同拼搏的项目经历使我能够完成这本书。

感谢我和我妻子共同的父母,他们一直给予我无私的关心和照顾,还教会我学会从生活中发掘无穷的技术灵感。

最后,感谢我挚爱的妻子,是她给予我直面挑战、战胜挑战的信心和力量。

受到自己开发年限和项目经验的限制,本书难免有疏漏和不足之处,希望能够听到您的批评和建议。

王翔