设计模式

[[设计模式英文]]

按设计模式的 目的 分成三类 #incremental #card

  • [[创建型模式]] :<-> 主要用于封装对象的实例化过程,隐藏具体类名与创建细节

  • [[结构型模式]] :<-> 强调类和对象的组合方式

  • [[行为型模式]] :<-> 侧重对象之间的交互与职责分配,不涉及实例化
    按设计模式的 范围 分成两类 #incremental #card

  • 类设计模式

  • 对象设计模式

策略模式

  • 抽象策略类

  • 具体策略类

  • 环境类

    • 策略类的引用

单例模式: 创建型 模式,提供创建对象的最佳方式

  • 一个单一类,该类创建自己的对象,同时确保只有单个对象被创建。

  • 这个类提供一个访问其唯一对象的方式,可以直接访问,不需要实例化该类对象

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Singleton {
public:
static Singleton& getInstance() {
static Singleton inst;
return inst;
}
Singleton(const Singleton&) = delete;
Singleton& operator=(const Singleton&) = delete;

// 其他数据函数
// ...

private:
Singleton() { ... }
// 其他数据成员
// ...
};

适配器模式: 结构型 模式,将一个类的接口转换成客户希望的另一个接口

  • 目标接口 Target

  • 适配者类 Adaptee

  • 适配器类 Adapter

    • 把适配者接口转换成目标接口

状态模式:判断逻辑提取到不同的状态对象中,允许状态对象在内部状态发生改变时改变其行为

  • 环境类角色 Context

    • 内部维护当前状态,并负责具体状态的切换
  • 抽象状态角色 State

    • 定义一个接口,封装环境对象中的特定状态所对应的行为
  • 具体状态角色 Concrete State

    • 实现抽象状态对应的行为,并且在需要的情况下进行状态切换

观察者模式:多个对象间存在一对多的依赖关系,当一个对象状态发生改变,所有依赖于它的对象都得到通知并被自动更新。

  • 抽象主题 Subject

    • 保存观察者对应的聚集类和增加、删除观察者的方法,通知所有观察者的抽象方法
  • 具体主题 Concrete Subject

    • 实现抽象目标中的通知方法
  • 抽象观察者 Observer

    • 更新自己的抽象方法,接到具体主题的更改通知时被调用
  • 具体观察者 Concrete Observer

    • 实现抽象观察者中定义的抽象方法

建造者模式

  • 将一个复杂对象的构造与它的表示分离,使同样的构建工程可以创建不同的表示。

  • 产品 Product

    • 多个组成部件的复杂对象
  • 抽象建造者 Builder

    • 一个包含创建产品各个子部件的抽象方法的接口,通常还包含一个返回复杂产品的方法。getResult
  • 具体建造者 Concrete Builder

    • 具体实现
  • 指挥者 Director

    • 调用建造者对象中的部件构造于适配方法完成复杂对象的创建。

装饰器模式, 结构型 模式

  • 在不改变现在对象结构的情况下,动态给该对象增加一些额外功能。

  • 抽象组件 Component

    • 定义一个抽象接口以规范准备接收附加责任的对象。
  • 具体构件(ConcreteComponent)

    • 实现抽象构件,通过装饰角色为其添加一些职责。
  • 抽象装饰(Decorator)

    • 继承抽象构件,并包含具体构件的实例,可以通过其子类扩展具体构件的功能。
  • 具体装饰(ConcreteDecorator)

    • 实现抽象装饰的相关方法,并给具体构件对象添加附加的责任。

备忘录 Memento 行为型模式 ,用于保存和恢复对象的状态
flyweight 享元

  • 享元是可共享的对象,可以同时在多个上下文中使用。

[[Ref]]

作者

Ryen Xiang

发布于

2025-06-07

更新于

2025-10-09

许可协议


网络回响

评论