Induction of Design Pattern

发布时间 2023-09-07 14:51:05作者: Mysticbinary

网上查到的设计模式有23种,通过归纳去认识他们也是一种不错的视角。
我这边不按照主流的观点去划分为创建型、结构型、行为型三大类,我只归纳为创建型(Creational Class)、简单功能场景(Simple Method Class)、复杂功能场景(Complex Method Class)三大类。原因是结构、行为这种词本身就比较泛,而模式本身就是一种比较交叉融合的状态,所以根据我的理解,我主观性的重新划分,当然只是为了让我理解和思考。

其实程序设计模式里,大多数的考虑初衷都是为了面向未来未知情况,在当前就先规划做好扩展方式,方便能让未来使用者使用方便的代码结构。
也有能节省资源的设计模式、方便解耦的设计模式...

Creational Class

帮助机器(系统)节省资源的创建对象模式:

  • Singleton Pattern
  • Flyweight Pattern
  • Prototype Pattern(也叫克隆模式)

面对未来未知,由外部提供需求来创建对象模式,如下几种应该说在各大框架里能常看到:

  • Simple Factory
  • Factory Methoed Pattern
  • Abstract Factory Pattern
    当抽象工厂模式只生产一个产品时,和工厂方法模式没啥区别。当它生成一组或多个产品时,才有所区别。
  • Buidler Pattern

Simple Method Class

Simple Method Class就是非常好理解的设计模式,他们往往都能对应现实生活中某些机构、某种职业的运作模式,所以非常好理解。

  • Facade Pattern(也叫前台接待模式)
  • Template Pattern
    模版模式也是一种应对未来未知情况的解决方案,部分可知,部分不可知;
  • 观察者模式
    一种一对多的关系,当一个类的状态发送改变,就通知所有依赖(有关系)的类;
  • 状态模式/策略模式
    将状态封装成一个类,不同状态的类,会有不同的行为。 状态模式和策略模式是一样的。
  • 中介者模式
    为了解耦各个类,只通过中介者去通信,有点绕。
  • Proxy Pattern
    • 代理对象充当了客户端和目标对象之间的中介,从而可以在访问目标对象时添加额外的逻辑;
    • 代理对象持有一个真实主题的引用,并在需要时创建或获取真实主题对象;
    • 代理对象在调用真实主题之前或之后,执行一些额外的操作,例如权限验证、缓存、日志记录等。
  • 责任链模式
    责任链模式很容易理解(想想在公司请假的流程,员工发起,组长审批——>部门领导审批——>HR审批——>BOSS...)
    它也用到递归,控制不好就容易死循环;

下面这些个模式一般不在程序设计的时候考虑,并且新程序在设计初期就不应该出现如下情况,会把程序搞复杂!反而,它们更适合运用在程序维护阶段,程序已经运行起来,在不大规模的重构之前,也没有好办法的时候才考虑使用。当然还有一种情况,就是你使用别人写好的接口,调用别人的SDK,你是无法修改调用的接口方法的,你能做的就是自己封装多一层中间层,下面是几种不同场景介绍:

  • Adapter Pattern(适配器模式)
    当需要使用一个已存在的类,但其接口与要求的接口不匹配时。
  • Decorator Pattern(装饰者模式)
    • 用于在不修改现有对象结构的前提下,动态地给对象添加额外的功能;
    • Decorator 和 Proxy有相似的地方,就是都是给现有类.方法增加额外功能,不同点在于Decorator是不修改现有对象结构

Complex Method Class

下面这几个模式就有点绕了,只能自己多思考了,无他法。

  • Composite Pattern
    需要用到递归,控制不好就容易死循环;
  • Bridge Pattern
  • 迭代器模式
    解耦思想,将行为和对象分离;
  • 备忘录模式
    在不暴露对象内部状态的情况下保存和恢复对象的状态。
    为了完成这个保护和恢复功能涉及的类比较多,就容易复杂。
  • 命令模式
    也是一种解构思想,将行为和数据结构分离;
  • 访问者模式
  • 解释器模式