前言
鲁迅先生曾说过: “其实地上本没有路,走的人多了,也便成了路”。模式与之同理,它是人类在工程应用领域经验的总结与传承,是人类在具体环境下解决特定现实问题所积累和整理的解决方案。模式的概念来自于建筑领域,模式之父Christopher Alexander博士将模式定义为“在具体环境中解决问题的方法”,它可以用于人类所从事的各个领域,这其中也包括软件工程领域。
设计模式开创者之一、敏捷开发方法的创始人Erich Gamma曾说过: “设计和开发面向对象软件是非常困难的,而设计和开发可复用的面向对象软件则更加困难”。在软件开发过程中,有经验的设计者往往会重复使用他们在以前设计工作中曾经用到的一些解决方案,这些解决方案可以提高设计者的开发效率与软件质量,并使所设计的软件更加灵活,易于扩展,可复用性也更高。设计模式为实现可维护性复用而诞生。
设计模式已经成功应用于很多软件的设计中。设计模式、重构、UML等已成为一个优秀的面向对象软件开发人员所必须掌握的知识和技能。无论是面向对象编程的初学者还是有一定编程经验的程序员,都可以从设计模式的学习和使用中深入理解面向对象思想的精华,开发出可扩展性和复用性俱佳的软件。本书编者在十多年的软件开发和多年的教学工作中积累了丰富的设计模式使用经验和教学经验,也深刻体会到学习设计模式的意义。目前,国内越来越多的高校在软件工程研究生和本科生教学中开设了“软件体系结构”“面向对象分析和设计”等课程,而设计模式是这些课程的核心组成部分之一,还有的学校将设计模式作为一门单独的课程开设,而很多软件培训机构在软件工程师培训课程中也包含了设计模式相关内容。
本书的目的在于让广大学生和学员更快、更好地理解和掌握每一个设计模式。本书在整理时参考了目前市面上已有的设计模式书籍,集各家所长,并在此基础上进行扩展与整理,适用于高校和培训教学,将一些原本深奥并难以理解的设计思想通过一些简单实例进行解析,让读者能够轻松掌握面向对象设计思想的精髓。本书以“实例驱动教学”为整体编写原则,每一个模式的学习均基于一或两个实例,通过实例来加深对模式的理解,并结合实例学习如何在实际开发中运用所学模式。对于每一个模式,所学内容包括模式动机与定义、模式结构与分析、模式实例与解析、模式效果与应用和模式扩展,内容丰富,讲解透彻,并提供了模式结构和实例的UML类图和Java实现代码,所有类图均严格按照UML 2.X标准绘制,所有代码均在JDK 1.8环境下通过测试且运行无误。
本书一共有27章,可分为四个部分。
第一部分包含第1~3章,介绍面向对象设计的一些基本知识,包括UML基础知识、面向对象设计原则和设计模式概述,作为后续设计模式学习的知识基础。
第二部分包含第4~9章,介绍6种常用的创建型设计模式,包括简单工厂模式、工厂方法模式、抽象工厂模式、建造者模式、原型模式和单例模式。
第三部分包含第10~16章,介绍7种常用的结构型设计模式,包括适配器模式、桥接模式、组合模式、装饰模式、外观模式、享元模式和代理模式。
第四部分包含第17~27章,介绍11种常用的行为型设计模式,包括职责链模式、命令模式、解释器模式、迭代器模式、中介者模式、备忘录模式、观察者模式、状态模式、策略模式、模板方法模式和访问者模式。
本书提供了完整的配套教学资料,包括实例源代码和电子课件。在每一章后面均配有一定量的习题,读者可以通过这些习题对所学知识进行巩固,加深理解,并学会在项目中运用所学知识来解决实际问题。本书提供了对应的教学视频,并配有《设计模式实验及习题解析》,作为本书的题解和实验教程。这些教学资料将形成一个完整的体系,为教学和学习提供便利。
本书既可作为高等院校软件工程专业研究生和本科生设计模式、软件体系结构、面向对象分析与设计等相关课程的教材,也可以作为各软件培训机构的软件工程师培训、软件架构师培训教材,还可以作为广大软件爱好者和软件开发人员的自学和参考用书。
本书第1版于2011年10月由清华大学出版社出版,本书修订了第1版中存在的一些错误和问题,并更新了部分内容。本书的最大特点是提供了配套的教学视频,供广大师生参考学习所需。本书由刘伟(中南大学软件学院)担任主编,胡志刚(中南大学软件学院)和于俊洋(河南大学软件学院)担任副主编。在编写过程中参考和引用了国内外很多书籍和网站的相关内容,部分图片的素材和个别实例的初始原型也来源于网络,由于涉及的网站和网页太多,没有一一列举,在此一并予以感谢。本书第1版已被多所高校所使用,编者也收到了很多意见和建议,在此向所有帮助和支持我们的朋友表示感谢。最后特别感谢清华大学出版社为本书的改版所付出的努力。
设计模式是无数人经验的积累,希望通过这本书的学习,读者能够从一些生活实例中领悟这些模式的精髓,并能够在合适的项目场景下使用它们。有了设计模式,我们的软件将变得更像一个艺术品,而不是一堆难以维护和重用的代码。
由于时间仓促、学识有限,书中不足和疏漏之处难免,恳请广大读者将意见和建议反馈给我们,以便在后续版本中不断改进和完善。
编者2018年8月30日