本书通过大量实例揭示了模式的本质:模式是一种描述系统设计的高级语言。本书阐述了如何使用这种强大的编程范例来创建效率更高、更加健壮、可重用性更好的设计方案。
作为开发更好的软件所需的一整套技术,设计模式已经得到了广泛的应用。然而,开始学习模式从来都不是一件容易的事。本书首先介绍了设计模式背后的原理,然后讨论了模式的基本形式,并回顾了面向对象的概念。之后,通过一系列的设计实例--从最初的想法到最后的代码,讨论了关键的设计目标和采用不同设计模式的得失。本书的代码既有Java的,也有C++和Visual Basic的。阅读本书之后,您将对应用程序设计工作中固有的约束,对如何最有效地运用那些解决重复出现的编程问题的核心设计模式,有一个深刻的认识。
本书的重要观点和主题:
·模式是设计的语言,是软件体系结构中的基本构件
·各种标准设计模式在系统设计中的价值和用途
·可扩展的软件开发和变更管理
·利用辅助模式来避免遗留问题
·新行为的测试与发布
·理解需求,为可能变化的实体创建连接点
本书解释了特定编程语言和独立于语言的设计模式之间的关系。本书还说明了模式在整个系统开发过程--从最初的设计到系统维护和产品升级——中所扮演的角色。
有了从本书中获得的背景知识和深入理解,您可以释放出设计模式的巨大能量,提高自己的编程工作的质量。
第1章 最初的思考:个人笔记
1. 1 背景
1. 2 小结
第2章 模式简介
2. 1 体系结构的构件
2. 2 模式的形式
2. 2. 1 模式一设计的语言
2. 2. 2 文档
2. 2. 3 可扩展的软件开发和变化管理
2. 2. 4 培训
2. 2. 5 银弹
2. 3 小结
第3章 面向对象概述
3. 1 简介
3. 1. 1 继承
3. 1. 2 组件
3. 2 小结
第4章 产品配置器
4. 1 简介
4. 2 问题定义
4. 3 解决方案
4. 4 小结
第5章 汉堡店101
5. 1 概述
5. 2 Sue的汉堡店
5. 2. 1 反思
5. 2. 2 简化
5. 3 小结
第6章 编程语言和模式
小结
第7章 模式和系统开发
7. 1 从头开始设计
7. 1. 1 了解你的需求
7. 1. 2 为未知数和我们认为可能发生变化的实体创建连接点
7. 1. 3 利用辅助模式确保没有遗留的问题
7. 1. 4 进行健全性检查
7. 1. 5 实现一小部分
7. 1. 6 必要时从更低的层次重新开始整个过程
7. 2 小结
第8章 模式和系统的发展(维护)
8. 1 维护
8. 2 一个简单的例子
8. 3 小结
第9章 最后的思考
附录A 产品代码
附录B "汉堡店"代码
附录C "黑杰克"代码
参考文献
为什么写这本书?
本书的内容将围绕着“如何正确使用模式来构建软件系统”这个主题展开。在本书中,我希望能通过讲解如何正确使用与具体的模式或系统无关的一般概念,让读者能够对现有模式的核心内容有一个完整的认识。在刚开始尝试使用模式的时候,开发人员和项目经理都常常无法做出正确的选择,因为他们完全忽视了模式的意义和相关的简单概念。相反,他们常常会把模式当作编码技巧,而不是一种描述系统设计的高级语言。本书就是要改变这种错误的观点,为读者提供确保成功所必需的方法。
在刚开始讲授软件设计的基础课时,我费了很大的力气来考虑一个问题:如何有效地“讲授”设计?我发现,最好的办法就是使用真实的范例,让学生参与其中,在利弊权衡中受到启发,并由此学到知识。我坚信这就是讲授设计技术的最根本的方法,所以,在我的培训课程中。在我的顾问工作中以及在本书中,我一直都在努力尝试使用这种教学方法。
本书所采用的方法是,通过一系列系统设计方案——从最初的想法到代码,让读者领会有关概念。在讲授设计课期间我很早就认识到,尽管设计与代码的关系并不大,但是让学生看到系统开发的真正最终产品——源代码——仍然是非常必要的。我提供了许多范例来说明:如何使用模式构建系统,这些系统将用目前最流行的三种编程语言—Visual Basic、C++和Java——来实现。当深入探讨代码以说明一些关键概念时,我尽量不要求读者进行大量的编程工作或其他正规的编程练习。
为了将注意力集中在“如何使用模式”上,而不是去深入探究现有的各种模式,本书将主要介绍几种核心的模式,即主要是现在已成为经典的《设计模式:可重用面向对象软件的元素》[Gam,95]一书中提到的模式。另外,在适当的时候,本书还介绍另外几种独特的模式,其中有我自己发明的,也有其他作者发明的。
建议你按照章节顺序阅读本书,不过你也可以根据需要跳过某些章节。尽管如此,我还是建议你在阅读其他章节之前,首先阅读第2章“模式简介”。本书采用的一般叙述方法是,首先介绍模式和一些面向对象的概念与图示,这些内容都集中放在一起。然后,马上进入实际范例,向你展示用于解决不同问题的各种模式的应用,以及每种模式的优劣,作为系统体系结构设计的指导。
在学习设计模式时,你需要完成一次思维上的转变,从一个新的角度来看待软件开发。可是在我讲授设计模式课程期间,我发现人们一开始都还没有完成这个转变。作为一名教师,我可以从学生呆滞的眼神中明白这一点(尽管这常常是由于早起的疲惫还没散去)。当课程进行到大约三分之一的时候,学生们开始将支离破碎的概念拼凑到一起,并且认识到:模式不仅仅是编码技巧或语言技术。突然之间,学生们的整个视野都变宽了,他们很快就领会到了这些技术对于整个软件开发过程的重要性。
作为本书的读者,我希望你能认真阅读本书及其中的例子,并获得同样的启发。一旦认识到了软件设计工作的内在规律,S很快你就能得到这种启发。然后,你就能从美学的角度来看待模式,而不仅仅是把模式当作编码技巧。你会把模式看成设计的关键工具,并能够正确使用模式。同样重要的是,你将知道如何使用模式,以及什么情况下不使用模式。根据工作中的约束和场景看待问题的能力,会让你在未来获得极大的成就。到了这个时候,我们的目标就完全达到了。
最后,希望你喜欢本书。