3. 简介
软件设计模式的起源归因于 Christopher Alexander 所做的工作。 作为架构师,
Alexander 注意到在给定的环境中存在常见问题及其相关的解决方案。 Alexander 将
此问题/解决方案/环境三元组称为“设计模式”,架构师在构建设计过程中可通过它以
统一的方式快速解决问题。 二十五年前第一次出版的 A Pattern Language: Towns,
Buildings, Construction (Alexander 等人编著,牛津大学出版社于 1977 年出版)
介绍了 250 多种建筑设计模式,并提供了将此概念融入软件开发领域的基本原则。
在 1995 年,软件业首次广泛采用了设计模式,因为它们与构建应用程序直接相关。
四位作者 Gamma、Helm、Johnson 和 Vlissides(统称为四人组或 GoF)将
Alexander 的设计模式与他们的作品 Design Patterns: Elements of Reusable Object-
Oriented Software (Addison-Wesley 出版公司于 1995 年出版)中的刚刚兴起的面
向对象的软件开发动向结合起来。 凭着他们丰富的经验和对现有对象框架的分析,
GoF 提供了 23 种设计模式,这些模式分析了在设计和构造应用程序时遇到的常见问
题和解决方案。 在这个出版物之后,设计模式的概念已发展为包含在软件领域中遇
到的很多 问题和解决方案。 事实上,设计模式的广泛采用导致了反模式概念的出现,
这些模式是指通常会使手头问题更加严重而不加解决问题的解决方案。
4. 设计模式原则
开闭原则
模块应尽量在不修改原代码的情况下进行扩展。
"Open for extension…" A key design principle in Spring Web MVC and in Spring in general
is the "Open for extension, closed for modification" principle.
里氏代换原则
如果调用的是父类的话,那么换成子类也完全可以运行。
依赖倒转原则
把父类都替换成它的子类,程序的行为没有变化。
接口隔离原则
合成/聚合复用
要尽量使用合成/聚合,尽量不要使用继承。
最少知识原则
即一个对象应对其他对象有尽可能少的了解。