设计模式分类详解与实战练习

购买与学习资源



设计模式分类详解与实战练习

📖 本文为系统学习设计模式分类的最佳资料,适合面向对象编程开发人员阅读与备考。内容结构合理,适合做学习笔记与面试准备。


一、什么是设计模式

1.1 设计模式的定义

设计模式(Design Pattern)是被反复使用、为大多数人所知的、经过分类总结的代码设计经验。它并不是具体的代码,而是解决特定问题的一种“套路”,即可复用的解决方案。

通俗理解

设计模式就像软件开发中的“通用公式”或“建筑蓝图”,不是直接可运行的代码,而是一种指导思想与结构组织方式。

1.2 为什么要学习设计模式

  • 提升代码复用性和可维护性
  • 让团队开发有共同语言,减少沟通成本。
  • 减少重复造轮子,避免走弯路。
  • 提升架构水平,系统性理解优秀代码结构。

二、设计模式的三大分类

设计模式经典的三大类,分别为创建型模式结构型模式行为型模式。这是“GoF”书中(《设计模式:可复用面向对象软件的基础》)的标准分类,已成为业界共识。
在这里插入图片描述

2.1 创建型模式(Creational Patterns)

关注点:如何创建对象,隐藏对象创建逻辑,简化对象的生成与配置。

常见模式:

  1. 单例模式(Singleton)
  2. 工厂方法模式(Factory Method)
  3. 抽象工厂模式(Abstract Factory)
  4. 建造者模式(Builder)
  5. 原型模式(Prototype)

2.2 结构型模式(Structural Patterns)

关注点:如何组织、组合类与对象,形成更大的结构。

常见模式:

  1. 适配器模式(Adapter)
  2. 桥接模式(Bridge)
  3. 组合模式(Composite)
  4. 装饰器模式(Decorator)
  5. 外观模式(Facade)
  6. 享元模式(Flyweight)
  7. 代理模式(Proxy)

2.3 行为型模式(Behavioral Patterns)

关注点:类与对象之间的通信与职责分配。

常见模式:

  1. 责任链模式(Chain of Responsibility)
  2. 命令模式(Command)
  3. 解释器模式(Interpreter)
  4. 迭代器模式(Iterator)
  5. 中介者模式(Mediator)
  6. 备忘录模式(Memento)
  7. 观察者模式(Observer)
  8. 状态模式(State)
  9. 策略模式(Strategy)
  10. 模板方法模式(Template Method)
  11. 访问者模式(Visitor)

三、设计模式全景结构图

┌────────────┬───────────────────────────┐
│ 创建型模式 │ 结构型模式                │
├────────────┼───────────────────────────┤
│ 单例       │ 适配器、桥接、装饰器      │
│ 工厂方法   │ 组合、外观、享元、代理    │
│ 抽象工厂   │                           │
│ 建造者     │                           │
│ 原型       │                           │
└────────────┴───────────────────────────┘
              │
              ▼
      ┌─────────────────────────┐
      │ 行为型模式              │
      ├─────────────────────────┤
      │ 责任链、命令、解释器    │
      │ 迭代器、中介者、备忘录  │
      │ 观察者、状态、策略      │
      │ 模板方法、访问者        │
      └─────────────────────────┘

四、各类设计模式代表性模式精要

4.1 创建型模式简析

4.1.1 单例模式(Singleton)
  • 目的:保证某个类在系统中只有一个实例,并提供全局访问点。
  • 场景:如配置管理、日志系统、数据库连接池。
  • 核心思想:构造函数私有,提供静态方法返回唯一实例。
class Singleton {
private:
    static Singleton* instance;
    Singleton() {}
public:
    static Singleton* getInstance() {
        if (!instance)
            instance = new Singleton();
        return instance;
    }
};
Singleton* Singleton::instance = nullptr;
4.1.2 工厂方法模式(Factory Method)
  • 目的:定义一个用于创建对象的接口,让子类决定实例化哪一个类。
  • 核心思想:将对象的创建与使用解耦。
4.1.3 抽象工厂模式(Abstract Factory)
  • 目的:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
  • 典型应用:跨平台 UI 工具包。
4.1.4 建造者模式(Builder)
  • 目的:将一个复杂对象的构建与其表示分离,使同样的构建过程可以创建不同的表示。
4.1.5 原型模式(Prototype)
  • 目的:通过复制已有实例来创建新的对象,避免耗时的初始化过程。

4.2 结构型模式简析

4.2.1 适配器模式(Adapter)
  • 目的:将一个类的接口转换成客户端期望的另一个接口,解决接口不兼容问题。
  • 典型应用:如老接口适配新系统。
4.2.2 装饰器模式(Decorator)
  • 目的:动态地给对象添加额外功能,比继承更灵活。
  • 典型应用:Java IO 流。
4.2.3 代理模式(Proxy)
  • 目的:为其他对象提供一种代理以控制对这个对象的访问。
  • 典型应用:远程代理、安全代理、虚拟代理。

4.3 行为型模式简析

4.3.1 观察者模式(Observer)
  • 目的:当一个对象状态发生变化时,依赖它的所有对象都会收到通知并自动更新。
  • 典型应用:事件监听、MVC 模式。
4.3.2 策略模式(Strategy)
  • 目的:定义一系列算法,将每个算法封装起来,让它们可以互换。
  • 典型应用:排序算法的切换、加密算法。
4.3.3 状态模式(State)
  • 目的:允许对象在内部状态变化时改变其行为,对象看起来好像修改了自身的类。
  • 典型应用:游戏角色状态切换。

五、常见设计模式选择与应用场景总结

分类代表模式适用场景优势
创建型单例全局唯一资源/对象控制资源,易于管理
创建型工厂方法对象种类多,动态创建解耦具体类,提高灵活性
创建型建造者复杂对象多步骤创建分离构建与表示
结构型适配器兼容不同接口复用旧代码,接口转换
结构型装饰器动态功能扩展灵活组合功能,无需继承
结构型代理访问控制、延迟、远程调用控制访问、保护原始对象
行为型观察者发布-订阅、事件驱动解耦,动态响应变化
行为型策略算法多样且可切换可扩展、替换、代码复用
行为型状态状态多变且行为切换状态逻辑独立,易扩展

六、设计模式分类核心记忆口诀

创建型问对象,结构型谈搭建,行为型重分工。

  • 创建型:怎么创建(单例、工厂、建造、抽象工厂、原型)
  • 结构型:怎么组合(适配器、装饰器、代理、桥接、外观、组合、享元)
  • 行为型:怎么协作(责任链、命令、解释器、迭代器、中介者、备忘录、观察者、状态、策略、模板方法、访问者)

七、设计模式分类模拟题练习

题目 1:设计模式基础分类题

问题:请问下列哪一项属于结构型设计模式?

A. 单例模式
B. 装饰器模式
C. 观察者模式
D. 工厂方法模式

参考答案 B. 装饰器模式(Decorator Pattern)属于结构型设计模式。

题目 2:应用场景判断题

问题:某个项目需要为核心类对象添加日志和权限校验功能,但又不想修改原有代码,也不希望通过复杂的多重继承。请问应该选用哪种设计模式?

A. 代理模式
B. 工厂方法
C. 观察者模式
D. 单例模式

参考答案 A. 代理模式。代理模式可以为核心对象添加日志、权限等功能,并控制对核心对象的访问,不需要修改原有对象结构。

题目 3:分类归纳题

问题:下列设计模式按三大类归属于哪一类?

  • 原型模式
  • 组合模式
  • 状态模式
  • 命令模式

请写出每个模式所属类别。

参考答案 - 原型模式:创建型 - 组合模式:结构型 - 状态模式:行为型 - 命令模式:行为型

题目 4:案例分析题

问题:你正在开发一款支持不同数据库(MySQL、SQLite、PostgreSQL)的应用,需要根据不同数据库类型动态切换底层实现。请问应该采用哪种设计模式?

A. 观察者模式
B. 策略模式
C. 工厂方法模式
D. 建造者模式

参考答案 C. 工厂方法模式。工厂方法适合根据参数动态生成不同的数据库对象,屏蔽底层差异。

题目 5:开放问答题

问题:简要说明行为型设计模式的主要关注点,以及举例说明一种行为型模式的应用场景。

参考答案 - 行为型设计模式关注对象或类之间的职责划分、通信与协作。 - 典型应用如“观察者模式”,在 GUI 程序、消息订阅发布系统中广泛应用,一旦主题对象发生变化,自动通知所有观察者进行响应。

八、总结与思维导图

8.1 设计模式分类结构思维导图

设计模式
├── 创建型
│   ├── 单例
│   ├── 工厂方法
│   ├── 抽象工厂
│   ├── 建造者
│   └── 原型
├── 结构型
│   ├── 适配器
│   ├── 桥接
│   ├── 装饰器
│   ├── 组合
│   ├── 外观
│   ├── 享元
│   └── 代理
└── 行为型
    ├── 责任链
    ├── 命令
    ├── 解释器
    ├── 迭代器
    ├── 中介者
    ├── 备忘录
    ├── 观察者
    ├── 状态
    ├── 策略
    ├── 模板方法
    └── 访问者

8.2 重点回顾

  • 设计模式三大分类是面试、架构必备常识。
  • 分类清晰,理解创建、结构、行为三大类别的核心思想。
  • 掌握常见代表模式及其应用场景,能快速根据实际问题匹配设计模式。
  • 多做题,多总结,多实践,才能真正学会设计模式。

九、拓展:如何高效学习设计模式

  1. 理解分类,不要死记硬背。
  2. 结合实际项目多用,比如用工厂方法封装对象创建、用观察者实现消息推送等。
  3. 画结构图和流程图,帮助记忆。
  4. 总结常用模式优缺点、适用场景
  5. 刷真题,多看开源项目代码实现。

十、推荐书籍与学习资源

  • 《设计模式:可复用面向对象软件的基础》(GoF)
  • 《Head First 设计模式》
  • refactoring.guru 网站设计模式专栏
  • 各大开源框架源码分析(Spring、Qt、Boost)

结语

设计模式的学习是一场系统性的思维训练,也是成为高级程序员的必经之路。希望本文对你建立完整的知识体系有所帮助,更多实际编程例子和详尽讲解,欢迎持续关注。


购买与学习资源


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值