设计模式(二、基础及学习)

195 阅读3分钟

写在前面

为什么要学习设计模式呢?设计模式可以带来什么好处?我们又该如何去学习呢?下面是阅读Head First设计模式书籍及自己整理的一些笔记,有错误的希望大家能够指出,共同进步。


一、代码的变动性

驱动代码改变的因素

  • 我们的顾客或用户决定要别的做法,或者想要新功能
  • 我的公司决定采用别的数据库产品,又从另一家厂商购买了数据,这造成了数据格式不兼容。
  • 应对技术改变,我们必须更新代码,适用于新协议
  • 我们学到了足够的构建系统的知识,希望回去把别的事情做得更好。
  • ...

由于上面的各种因素,将项目设计为一个容易了解、容易维护、具有弹性的架构是非常重要的,因为我们需要时刻面对变动,设计模式是根据以往经验总结出来的模式,可以让我们减少大量的工作和设计,避免进入琐碎的实现细节的讨论。设计模式作为“共享模式词汇”,可以让我们快速的理解别人的设计或者让别人快速理解我们的设计,能够帮助初级开发人员快速成长。


二、如何使用设计模式

设计模式不会直接进入代码中,而会先进入你的“大脑”中。一旦你先在脑海中装入了许多关于设计模式的知识,就能够开始在心设计中采用它们。在我看来,设计模式的学习应该是如下面步骤(在接下来的学习也会按照下面路线,有错误的希望大佬指出来哈):

  • 学习理论知识,了解设计原则及常用设计模式
  • 通过书籍或网上的案例,学习使用设计模式和不使用设计模式的区别,画出对应设计模式的UML图(processon)并实现其代码
  • 重构自己写过的耦合度高且难以维护的代码,进一步掌握该设计模式
  • 学习公司其他大佬在项目中运用的设计模式(如果有)
  • 重复3、4,达到在系统设计前,能够快速选择合适的设计模式,并且能够快速确定系统的变动部分,设计出容易维护、具有弹性的架构的境界。


三、设计工具箱内的工具

OO基础:

  • 抽象
  • 封装
  • 多态
  • 继承

OO原则(6个):

  • 封装变化
  • 多用组合,少用继承
  • 针对接口编程,不针对是实现编程
  • ...

OO模式(23种基本 + 其他):


要深入理解设计模式,需要先理解OO基础。大多数的模式和原则,都着眼于软件变化的主题,在设计系统时,我们通常会把变化的部分抽出来封装,并选择合适的模式设计,良好的OO设计必须具备可复用、可扩充、可维护三个特性。