云原生系列Go语言篇-Go语言的23种设计模式

Coding Alan 2年前 (2023-03-28) 1281次浏览 0个评论 扫描二维码

本文来自正在规划的Go语言&云原生自我提升系列,欢迎关注后续文章。

GoF(Gang of Four),GoF都是知名的软件工程师并且在面向对象编程和软件设计领域具有丰富的经验。他们于上世纪90年代一起在IBM的T.J.华生研究中心工作。这四人也即Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides于1994年出版了一本《设计模式- 可复用的面向对象软件元素》。此后在软件工程领域影响深远,以致于软件工程师们大量讨论和使用书中所介绍的23种设计模式。

Go语言并没有将自己定位成面向对象的编程语言,但讨论23种设计模式对我们理解它也会有一定的帮助。

23种设计模式分为三大类:

  • 创建型模式(Creational Patterns):这些模式主要关注对象创建机制,针对具体场景选择对应方式创建对象。包含有5种设计模式:
    • 单例模式(Singleton Pattern)
    • 工厂方法模式(Factory Method Pattern)
    • 抽象工厂模式(Abstract Factory Pattern)
    • 建造者模式(Builder Pattern)
    • 原型模式(Prototype Pattern)
  • 结构型模式(Structural Patterns):这些模式主要关注对象的组合,通过单独的对象或类形成更大型的结构。包含7种设计模式:
    • 适配器模式(Adapter Pattern)
    • 桥接模式(Bridge Pattern)
    • 组合模式(Composite Pattern)
    • 装饰器模式(Decorator Pattern)
    • 外观模式(Facade Pattern)
    • 享元模式(Flyweight Pattern)
    • 代理模式(Proxy Pattern)
  • 行为型模式(Behavioral Patterns):这些模式关注的是对象间的通信,定义对象的交互方式及分配责任。包含11种设计模式:
    • 责任链模式(Chain of Responsibility Pattern)
    • 命令模式(Command Pattern)
    • 解释器模式(Interpreter Pattern)
    • 迭代器模式(Iterator Pattern)
    • 中介者模式(Mediator Pattern)
    • 备忘录模式(Memento Pattern)
    • 观察者模式(Observer Pattern)
    • 状态模式(State Pattern)
    • 策略模式(Strategy Pattern)
    • 模板方法模式(Template Method Pattern)
    • 访问者模式(Visitor Pattern)

云原生系列Go语言篇-Go语言的23种设计模式

单例模式(Singleton Pattern)

单例模式可对包级变量仅初始化一次,然后在整个应用中供其它代码调用。

工厂方法模式(Factory Method Pattern)

工厂方法模式可通过返回接口的函数来实现,然后按需对接口做不同实现。

抽象工厂模式(Abstract Factory Pattern)

抽象工厂模式可通过接口可创建相关对象的工厂实现。

建造者模式(Builder Pattern)

建造者模式可使用结构体加构建过程中进行设置的可选参数来实现。

原型模式(Prototype Pattern)

原型模式可通过返回已有对象拷贝的克隆方法实现。

适配器模式(Adapter Pattern)

适配器模式可使用封装已有类型的接口来与其它接口相兼容。

桥接模式(Bridge Pattern)

桥接模式使用接口来分离抽象及其实现。

组合模式(Composite Pattern)

组合模式通过可表示单个对象及对象组的树状接口结构实现。

装饰器模式(Decorator Pattern)

装饰器模式可通过在接口中封装其它接口并添加行为来实现。

外观模式(Facade Pattern)

外观模式使用隐藏多个子系统复杂度的包级函数来实现。

享元模式(Flyweight Pattern)

享元模式在Go语言中可使用在应用中多处共享的对象缓存来实现。

代理模式(Proxy Pattern)

Go语言中代理模式可使用实现了接口的结构体并将方法调用传递给对象来实现。

责任链模式(Chain of Responsibility Pattern)

Go语言中责任链模式可使用沿请求链传递的handler列表实现。

命令模式(Command Pattern)

Go语言中命令模式可使用表示命令的接口实现,由调用者执行这些命令。

解释器模式(Interpreter Pattern)

Go语言中解释器模式可通过表示抽象语法树的结构体及解释该树的方法的组合来实现。

迭代器模式(Iterator Pattern)

Go语言中迭代器模式可使用定义了next方法的接口来实现,不同集合的接口实现不同。

中介者模式(Mediator Pattern)

Go语言中中介者模式可使用作为不同对象中介的结构体来实现,它帮助完成对象间的通信。

备忘录模式(Memento Pattern)

Go语言中备忘录模式可使用表示具体时间点对象状态以及管理这些状态的结构体来实现。

观察者模式(Observer Pattern)

Go语言中观察者模式可使用一组表示被观察者和观察者的接口来实现。

状态模式(State Pattern)

Go语言中状态模式可使用一组表示对象不同状态的接口,以及管理这些状态转换的上下文来实现。

策略模式(Strategy Pattern)

Go语言中策略模式可使用表示不同算法或行为的接口以及实现这些接口的结构体实现。

模板方法模式(Template Method Pattern)

Go语言中模板方法模式可使用定义了模板方法的接口来实现,不同行为对接口做不同的实现。

访问者模式(Visitor Pattern)

Go语言中访问者模式使用表示访问者及被访问者的接口以及接收访问者并对被访问对象执行操作的方法实现。

喜欢 (1)
[]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址