23种经典设计模式(GoF + 后续补充常用模式)通常被分为三大类:
一、创建型模式(Creational Patterns)------ 共 5 种(GoF 原始)
关注对象的创建方式,将对象的创建与使用分离。
- 单例模式(Singleton)
确保一个类只有一个实例,并提供全局访问点。 - 工厂方法模式(Factory Method)
定义一个创建对象的接口,让子类决定实例化哪一个类。 - 抽象工厂模式(Abstract Factory)
提供一个接口,用于创建相关或依赖对象的家族。 - 建造者模式(Builder)
将一个复杂对象的构建与表示分离,相同构建过程可创建不同表示。 - 原型模式(Prototype)
用原型实例指定创建对象的种类,通过拷贝原型来创建新对象。
二、结构型模式(Structural Patterns)------ 共 7 种(GoF 原始)
关注类和对象的组合结构,处理类或对象的组合关系。
- 适配器模式(Adapter)
将一个类的接口转换成客户希望的另一个接口。 - 桥接模式(Bridge)
将抽象部分与实现部分分离,使它们可以独立变化。 - 组合模式(Composite)
将对象组合成树形结构以表示"部分-整体"的层次结构。 - 装饰者模式(Decorator)
动态地给一个对象添加额外职责。 - 外观模式(Facade)
为子系统中的一组接口提供一个一致的界面。 - 享元模式(Flyweight)
运用共享技术有效支持大量细粒度对象。 - 代理模式(Proxy)
为其他对象提供一种代理以控制对这个对象的访问。
三、行为型模式(Behavioral Patterns)------ 共 11 种(GoF 原始)
关注对象之间的职责分配与算法封装。
- 责任链模式(Chain of Responsibility)
- 命令模式(Command)
- 解释器模式(Interpreter)
- 迭代器模式(Iterator)
- 中介者模式(Mediator)
- 备忘录模式(Memento)
- 观察者模式(Observer)
- 状态模式(State)
- 策略模式(Strategy)
- 模板方法模式(Template Method)
- 访问者模式(Visitor)
至此正好 23 种,这就是《设计模式:可复用面向对象软件的基础》(GoF 书)中正式提出的 23 种设计模式。
补充说明(常被面试问到)
- 实际开发中最常用的 8--10 种:
单例、工厂(工厂方法+抽象工厂)、建造者、代理、适配器、装饰者、观察者、策略、模板方法。 - 最爱考的:单例、工厂、观察者、策略、装饰者、适配器、模板方法。
- 最难理解的通常是:抽象工厂、桥接、解释器、访问者。
最容易被挖得很深的前8个
单例:问8种写法(饿汉、懒汉、DCL、静态内部类、枚举...)+ 反射/序列化破坏 + Spring 中的单例
工厂系列:简单工厂 vs 工厂方法 vs 抽象工厂区别 + 实际场景举例
代理:静态代理 vs JDK 动态代理 vs CGLIB + Spring AOP 原理
观察者 vs 发布订阅(Redis Pub/Sub、Kafka)区别
策略 + 工厂 + 模板方法 常常一起考(策略的上下文如何与工厂结合)
装饰者 vs 代理 区别(重点:透明性与目的不同)
模板方法 vs 策略(继承 vs 组合)
Builder 在高并发下如何线程安全?(通常配合原型模式或不可变对象)
一句口诀记忆高频模式(便于快速回忆)
"单工建代策观装模"
→ 单例、工厂、建造者、代理、策略、观察者、装饰者、模板方法
------ 这8个掌握精通,90%的设计模式都扛得住。
快速记忆口诀(8个模式)
"单工建代策观装模"
单:单例(只有一个)
工:工厂(抽象工厂+工厂方法)
建:建造者(复杂对象一步步建)
代:代理(替身)
策:策略(算法随意换)
观:观察者(状态变了我告诉你)
装:装饰者(动态加料)
模:模板方法(父类定流程,子类填空)