
写在前面
为什么要学习设计模式呢?设计模式可以带来什么好处?我们又该如何去学习呢?下面是阅读Head First设计模式书籍及自己整理的一些笔记,有错误的希望大家能够指出,共同进步。
一、代码的变动性
驱动代码改变的因素:
- 我们的顾客或用户决定要别的做法,或者想要新功能
- 我的公司决定采用别的数据库产品,又从另一家厂商购买了数据,这造成了数据格式不兼容。
- 应对技术改变,我们必须更新代码,适用于新协议
- 我们学到了足够的构建系统的知识,希望回去把别的事情做得更好。
- ...
由于上面的各种因素,将项目设计为一个容易了解、容易维护、具有弹性的架构是非常重要的,因为我们需要时刻面对变动,设计模式是根据以往经验总结出来的模式,可以让我们减少大量的工作和设计,避免进入琐碎的实现细节的讨论。设计模式作为“共享模式词汇”,可以让我们快速的理解别人的设计或者让别人快速理解我们的设计,能够帮助初级开发人员快速成长。
二、如何使用设计模式
设计模式不会直接进入代码中,而会先进入你的“大脑”中。一旦你先在脑海中装入了许多关于设计模式的知识,就能够开始在心设计中采用它们。在我看来,设计模式的学习应该是如下面步骤(在接下来的学习也会按照下面路线,有错误的希望大佬指出来哈):
- 学习理论知识,了解设计原则及常用设计模式
- 通过书籍或网上的案例,学习使用设计模式和不使用设计模式的区别,画出对应设计模式的UML图(processon)并实现其代码
- 重构自己写过的耦合度高且难以维护的代码,进一步掌握该设计模式
- 学习公司其他大佬在项目中运用的设计模式(如果有)
- 重复3、4,达到在系统设计前,能够快速选择合适的设计模式,并且能够快速确定系统的变动部分,设计出容易维护、具有弹性的架构的境界。

三、设计工具箱内的工具
OO基础:
- 抽象
- 封装
- 多态
- 继承
OO原则(6个):
- 封装变化
- 多用组合,少用继承
- 针对接口编程,不针对是实现编程
- ...
OO模式(23种基本 + 其他):
要深入理解设计模式,需要先理解OO基础。大多数的模式和原则,都着眼于软件变化的主题,在设计系统时,我们通常会把变化的部分抽出来封装,并选择合适的模式设计,良好的OO设计必须具备可复用、可扩充、可维护三个特性。