设计模式的底层逻辑: 怎样学习设计模式

100 阅读3分钟

#学习笔记 #设计模式 #review

什么是面向对象的设计模式?

至今,写代码的三种方式:

  • 面条式代码。特点是巨长的函数,没有抽成小函数。
  • 过程式代码。使用函数封装了计算过程,典型代表是C。可能造成代码可维护性、可扩展性较差。
  • 对象式代码。使用面向对象思路编写代码,典型代表是JAVA。

本文讨论的都是面向对象的设计模式。

注意

  • 设计模式是一种前人在面对软件开发中常见的一些问题,总结下来的经验、套路、模版。某一种设计模式是应对某一类的问题的较好的工程实践。
  • 设计模式并不是一成不变的。大概20年前总结的套路,到现在未必全盘适用。软件、语言、工具都在发生变化,不要墨守成规,觉得设计模式一定好,不能做变化。

什么是设计模式的底层逻辑

找到变化,封装变化 - FROM GoF

  • 什么在变化
  • 如何封装变化

什么在变化

可以从对象生命周期的角度,思考变化点:对象创建、对象被使用、对象消亡。 对象有三个不同维度的变化:

  • 对象结构的变化
  • 对象规格的变化
  • 对象行为的变化。

不同的业务场景,变化点不太一样,要具体问题具体分析。

  1. 创建一个对象,思考一下有没有其他类型的对象,数量有没有变化,对象创建的复杂度会不会发生变化?...
  2. 在学习具体的设计模式时,思考变化点在哪?是如何被识别出来的?其典型的特征是什么?

如何封装变化

封装可以分为对数据的封装、方法的封装、类型的封装等等。

从手法上看,可以分为继承、组合等等。

从编程原则上看,可以分为单一原则、依赖倒置原则、开闭原则等等。

不同的设计模式及其UML图,表达了不同的具体封装手法,可以从中学习到具体的技巧。

如何更好的使用设计模式?

关键思维 结构决定行为。所以,在应对业务需求,特别是复杂的业务需求,有两种思路:

  • 演绎思维:从结构出发,思考功能,思考行为
  • 归纳思维:从行为出发,思考功能,推导结构

当有一种业务场景时,先思考它的职责是什么,再去思考应该由哪些业务对象去承担,这也是典型的归纳思维。比如在优惠券业务中,它的业务活动就三个:建券、发券、用券,也就是任何一个优惠券系统,它要提供这三个最为基础的能力,这三个能力又对应到两个业务对象:券批次和券实例,券批次相当于是券的模板,告知优惠券的预算有多少、券面额是多少、使用条件是什么……,具体发放到用户手上的才是券实例。

参考资料