C++设计模式分类(GOF-23种设计模式)

文章目录

GOF-23 设计模式分类

一、从目的分类

1. 创建型(Creational)模式

  • 核心目标:应对需求变化对对象创建时具体类型实现的影响
  • 实现方式:将对象创建的职责延迟到子类或其他对象
  • 典型模式:工厂方法、抽象工厂、单例、建造者、原型

2. 结构型(Structural)模式

  • 核心目标:应对需求变化对对象结构的影响
  • 实现方式:通过类继承或对象组合构建更灵活的结构
  • 典型模式:适配器、装饰器、代理、组合、桥接

3. 行为型(Behavioral)模式

  • 核心目标:应对需求变化对多个交互对象的影响
  • 实现方式:通过类继承或对象组合划分职责
  • 典型模式:观察者、策略、命令、状态、模板方法

二、从范围分类

1. 类模式(Class Pattern)

  • 关注点 :类与子类的静态关系
  • 实现方式:依赖继承机制(编译时确定)
  • 典型模式:模板方法、工厂方法、抽象工厂

2. 对象模式(Object Pattern)

  • 关注点 :对象间的动态关系
  • 实现方式:依赖组合/聚合(运行时确定)
  • 典型模式:策略、装饰器、观察者、代理

三、分类说明

分类维度 创建型 结构型 行为型
目的 解决对象创建问题 解决对象结构问题 解决对象交互与职责划分问题
范围 可能涉及类模式/对象模式 主要为对象模式 主要为对象模式

从封装变化角度对模式分类

一、组件协作

定义

现代软件专业分工之后的第一个结果是"框架与应用程序的划分","组件协作"模式通过晚期绑定,来实现框架与应用程序之间的松耦合,是二者之间协作时常用的模式。

Template Method(模板方法模式)

定义算法骨架,延迟部分步骤到子类。

Observer / Event(观察者/事件模式)

一对多依赖关系,状态变化时通知观察者。

Strategy(策略模式)

封装可替换的算法策略,动态切换行为。


二、单一职责

Decorator(装饰器模式)

动态添加职责,避免类爆炸。

Bridge(桥接模式)

分离抽象与实现,独立扩展两者。


三、对象创建

Factory Method(工厂方法模式)

定义对象创建接口,由子类实现具体创建。

Abstract Factory(抽象工厂模式)

创建一组相关或依赖的对象族。

Prototype(原型模式)

通过复制原型对象创建新实例。

Builder(建造者模式)

分步构建复杂对象。


四、对象性能

Singleton(单例模式)

确保类只有一个实例,全局访问点。

Flyweight(享元模式)

共享细粒度对象,减少内存消耗。


五、接口隔离

Façade(外观模式)

简化复杂子系统的接口。

Proxy(代理模式)

控制对目标对象的访问。

Mediator(中介者模式)

集中管理对象交互,降低耦合。

Adapter(适配器模式)

适配不兼容接口,促进复用。


六、状态变化

Memento(备忘录模式)

保存和恢复对象状态。

State(状态模式)

对象行为随内部状态改变。


七、数据结构

Composite(组合模式)

树形结构组合对象。

Iterator(迭代器模式)

顺序访问聚合对象元素。

Chain of Responsibility(责任链模式)

链式传递请求,灵活处理。


八、行为变化

Command(命令模式)

将请求封装为对象,支持参数化和日志记录。

Visitor(访问者模式)

对元素集合执行操作,分离算法与结构。


九、领域问题

Interpreter(解释器模式)

定义语言语法并解释执行。

相关推荐
zhanghaha13142 分钟前
Qt 类完整例程【逐词拆解 + 逐步骤执行保姆教程】
开发语言·qt
xlq2232212 分钟前
全面复习7
c++
code2cat38 分钟前
Java进阶篇之AtomicReferenceFieldUpdater:用不可变快照替换整份状态
java·开发语言·cas
Nathan__2742 分钟前
PHP面试题——情景应用
开发语言·php
geats人山人海43 分钟前
现代c++2.4 虚继承
java·开发语言·c++
csuzhucong1 小时前
天元一号、二号、三号
c++
灯澜忆梦1 小时前
【面向对象编程c++】| 数组与函数
java·数据结构·c++
我命由我123451 小时前
Android 广播 - 组件通信
android·java·开发语言·android studio·android jetpack·android-studio·android runtime
前端 贾公子2 小时前
LangGraph == 图的状态(State)管理 (中)
开发语言·数据库·python
起个名字费劲死了2 小时前
VisionMaster 十二点标定+单点抓取
c++·visionmaster