具体的详细的介绍可以参考网站:https://refactoringguru.cn/design-patterns

构建型设计模式

  1. 首先看对象的构造复杂不复杂,如果构造的步骤特别复杂,在new万之后还需要很多的配置步骤,这个就可以考虑使用生成器设计模式,将这些构建封装起来,不同的构造者就能得到不同的对象。
  2. 考虑是否需要使用单例
  3. 如果产品之间的关联性不大,但是需要根据配置来创建,可以考虑使用简单工厂,将new放在同一个地方,免得散落在各地。如果不需要根据配置来创建,就直接使用new就行了。
  4. 一组相关的产品,有着某种共同接口,如果产品个体之间存在互相替换的需要,考虑使用工厂方法。
  5. 如果产品之间存在一组替换另外一组,就考虑抽象工厂。前提是,产品之间能分组。

结构性设计模式

结构性主要关注,如何使得已有的类如何能更好的工作。

  1. 如果一个方便更改的类,需要接入到系统。那就需要对新加入的类进行包装,加多一层符合现在系统的接口。这个就是适配器模式。
  2. 如果你希望在运行时给对象添加功能,可以考虑装饰器模式。一般是对某个接口增强。
  3. 如果实在是没法通过继承给某个类扩展功能,也可以使用装饰器模式。
  4. 如果有一个类,我们希望对他做一些保护,隐藏,访问控制,可以考虑添加一个包裹类,接口根原始类一模一样。这个就是代理模式。
  5. 如果现在系统的接口太多了,可以考虑在这些接口上新增加一层常用的接口,方便使用。如果不屏蔽对原接口的使用,这个就是外观模式,如果屏蔽对原接口的使用,那就是中介模式。这个是在系统变得复杂之后再考虑。
  6. 如果类的属性可以分为2个维度,比如颜色和形状,平台和控件,类是与抽象工厂,考虑考虑桥接模式,将2个维度分别抽出来。
  7. 如果类与类之间有明显的树形结构,则可以考虑组合结构。

行为型设计模式

行为型基本上就是根据某种特殊的功能,或者目的来总结的。

  1. 如果需要消息通知,则使用观察者模式。
  2. 如果需要状态间切换,考虑使用状态模式。
  3. 针对不同的策略,使用不同的逻辑,使用策略。
  4. 如果是遍历,考虑迭代器模式
  5. 如果一个逻辑经过的过程算法是一样的,只是某些是否需要改动一点,考虑模板方法
  6. 消息链式传递,考虑责任链模式。但是,如果链的长度固定,顺序固定,也不一定需要。
  7. 如果需要撤销功能,考虑备忘录模式。

总结

其实类与类之间的关系无非就是继承和组合,对象与对象之间是简单单向引用,还是互相双向引用。所有的设计模式,都是基于不同的目的,在这上面做文章而已。