#学习笔记 #设计模式 #review
什么是面向对象的设计模式?
至今,写代码的三种方式:
- 面条式代码。特点是巨长的函数,没有抽成小函数。
- 过程式代码。使用函数封装了计算过程,典型代表是C。可能造成代码可维护性、可扩展性较差。
- 对象式代码。使用面向对象思路编写代码,典型代表是JAVA。
本文讨论的都是面向对象的设计模式。
注意
- 设计模式是一种前人在面对软件开发中常见的一些问题,总结下来的经验、套路、模版。某一种设计模式是应对某一类的问题的较好的工程实践。
- 设计模式并不是一成不变的。大概20年前总结的套路,到现在未必全盘适用。软件、语言、工具都在发生变化,不要墨守成规,觉得设计模式一定好,不能做变化。
什么是设计模式的底层逻辑
找到变化,封装变化 - FROM GoF
- 什么在变化
- 如何封装变化
什么在变化
可以从对象生命周期的角度,思考变化点:对象创建、对象被使用、对象消亡。 对象有三个不同维度的变化:
- 对象结构的变化
- 对象规格的变化
- 对象行为的变化。
不同的业务场景,变化点不太一样,要具体问题具体分析。
- 创建一个对象,思考一下有没有其他类型的对象,数量有没有变化,对象创建的复杂度会不会发生变化?...
- 在学习具体的设计模式时,思考变化点在哪?是如何被识别出来的?其典型的特征是什么?
如何封装变化
封装可以分为对数据的封装、方法的封装、类型的封装等等。
从手法上看,可以分为继承、组合等等。
从编程原则上看,可以分为单一原则、依赖倒置原则、开闭原则等等。
不同的设计模式及其UML图,表达了不同的具体封装手法,可以从中学习到具体的技巧。
如何更好的使用设计模式?
关键思维 结构决定行为。所以,在应对业务需求,特别是复杂的业务需求,有两种思路:
- 演绎思维:从结构出发,思考功能,思考行为
- 归纳思维:从行为出发,思考功能,推导结构
当有一种业务场景时,先思考它的职责是什么,再去思考应该由哪些业务对象去承担,这也是典型的归纳思维。比如在优惠券业务中,它的业务活动就三个:建券、发券、用券,也就是任何一个优惠券系统,它要提供这三个最为基础的能力,这三个能力又对应到两个业务对象:券批次和券实例,券批次相当于是券的模板,告知优惠券的预算有多少、券面额是多少、使用条件是什么……,具体发放到用户手上的才是券实例。