/goDesignPatterns

go设计模式的学习

Primary LanguageGo

goDesignPatterns

go设计模式的学习

1. Creational Patterns(创建型模式): 这些模式与对象创建机制有关,目的是提高创建对象的灵活性和可扩展性。

Singleton(单例模式)
: 确保一个类只有一个实例,并提供一个全局访问点

Simple Factory(简单工厂模式)
: 一个工厂类负责创建所有产品,通过条件判断决定创建哪种产品

Factory Method(工厂方法模式)
: 每个产品对应一个工厂类,符合开闭原则

Abstract Factory(抽象工厂模式)
: 每个工厂类可以创建一组相关产品,强调产品族的概念

Builder(建造者模式)
: 它用于分步构建复杂对象。建造者模式的核心**是将一个复杂对象的构建过程与其表示分离,使得同样的构建过程可以创建不同的表示。

Prototype(原型模式)
: 它通过复制现有对象来创建新对象,而不是通过新建类的方式。原型模式的核心**是利用对象的克隆能力,避免重复初始化,特别适用于创建成本较高的对象。

: 使用原型模式,如果有引用类型,则需要考虑深拷贝和浅拷贝的问题 浅拷贝只复制对象本身而不复制其引用的对象,深拷贝则会递归地复制整个对象图。 这需要根据需求选择适当的拷贝方式

2. Structural Patterns(结构型模式): 这些模式关注类或对象如何组成更大的结构。

Adapter(适配器模式)
: 它允许不兼容的接口之间进行协作。适配器模式的核心**是将一个类的接口转换成客户端期望的另一个接口,从而使原本不兼容的类能够一起工作。

Bridge(桥接模式)
: 它的核心**是将抽象部分与实现部分分离,使它们可以独立变化。通过这种方式,桥接模式能够避免类的数量爆炸(即类的组合呈指数增长),同时提高代码的可扩展性和可维护性。

Composite(组合模式)
: 它允许你将对象组合成树形结构来表示“部分-整体”的层次关系。组合模式让客户端可以统一地处理单个对象和对象组合。

Decorator(装饰者模式)
: 它允许你动态地为对象添加行为或职责,而不需要修改对象的原始类。通过引入装饰者类,可以在运行时灵活地组合不同的功能,而不需要创建大量的子类。装饰者模式的核心**是将对象包装在一个或多个装饰者中,每个装饰者都可以在调用被装饰对象的方法之前或之后添加额外的行为。

Facade(外观模式)
: 它提供了一个统一的接口,用于访问子系统中的一组接口。外观模式的核心**是简化复杂系统的使用,通过提供一个高层接口,隐藏系统的复杂性,使客户端更容易使用。

Flyweight(享元模式)
: 它通过共享对象来减少内存使用和提高性能。享元模式的核心**是将对象的共享部分(内部状态)与不可共享部分(外部状态)分离,从而减少重复对象的创建。

Proxy(代理模式)
: 它通过提供一个代理对象来控制对另一个对象的访问。代理模式的核心**是在不改变原始对象的情况下,通过代理对象来增强或限制对原始对象的访问。

3. Behavioral Patterns(行为型模式): 这些模式与对象之间的交互和职责划分相关。

Chain of Responsibility(职责链模式)
: 是一种行为设计模式,它允许多个对象有机会处理请求,从而避免请求的发送者与接收者之间的耦合。责任链模式将这些对象连成一条链,并沿着这条链传递请求,直到有对象处理它为止。

Command(命令模式)
: 它将请求封装为一个对象,从而使你可以用不同的请求对客户进行参数化,并且支持请求的排队、记录日志、撤销操作等功能。

Interpreter(解释器模式)
: 它定义了一种语言的语法表示,并提供了一个解释器来解释这种语法。解释器模式通常用于处理类似编程语言、查询语言、规则引擎等场景。

Iterator(迭代器模式)
: 它提供了一种方法顺序访问一个聚合对象中的各个元素,而又不需要暴露该对象的内部表示。迭代器模式的核心**是将遍历逻辑从聚合对象中分离出来,使得聚合对象和遍历逻辑可以独立变化。

Mediator(中介者模式)
: 它通过引入一个中介者对象来封装一组对象之间的交互。中介者模式的核心**是 将对象之间的复杂交互集中到一个中介者对象中,从而减少对象之间的直接耦合。

Memento(备忘录模式)
: 它允许在不破坏封装性的前提下,捕获并外部化一个对象的内部状态,以便稍后可以将该对象恢复到之前的状态。备忘录模式的核心**是 将对象的状态保存到一个备忘录对象中,并在需要时从备忘录中恢复状态。

Observer(观察者模式)
: 它定义了对象之间的一对多依赖关系。当一个对象(被观察者)的状态发生改变时,所有依赖它的对象(观察者)都会收到通知并自动更新。

State(状态模式)
: 它允许对象在其内部状态改变时改变其行为。状态模式的核心**是将对象的状态封装成独立的类,并将对象的行为委托给当前状态对象。

Strategy(策略模式)
: 它定义了一系列算法,并将每个算法封装起来,使它们可以互相替换。策略模式的核心**是将算法的使用与算法的实现分离,从而使得算法可以独立于客户端而变化。 通过策略模式,可以在运行时动态地选择算法,而不需要修改客户端代码。

Template Method(模板方法模式)
: 它定义了一个算法的骨架,并将某些步骤延迟到子类中实现。模板方法模式的核心**是 将算法的通用部分放在父类中,而将可变部分交给子类实现。 通过模板方法模式,可以避免代码重复,并确保算法的结构不变。

Visitor(访问者模式)
: 它允许你将算法与对象结构分离。访问者模式的核心**是 将操作(算法)从对象结构中分离出来,使得可以在不修改对象结构的情况下定义新的操作。