23种设计模式

23种设计模式

lx 8 2026-07-06

23种设计模式

创建型模式(5种)- 解决"怎么创建对象"

模式名称 核心实现思路(一句话说清怎么做) Java / Spring 经典应用
单例模式 (Singleton) 私有构造器 + 静态方法返回唯一实例(双重检查锁 / 静态内部类 / 枚举) Runtime.getRuntime();Spring Bean 默认单例池
工厂方法 (Factory Method) 定义抽象工厂方法,子类重写该方法返回具体产品 Calendar.getInstance();Spring FactoryBean.getObject()
抽象工厂 (Abstract Factory) 定义多个工厂方法分别创建一族产品,具体工厂实现这一族产品的创建 Connection 创建 Statement / PreparedStatement;Spring JdbcFactory
建造者模式 (Builder) 链式调用设置可选参数,最后调用 build() 一次性构造复杂对象 StringBuilder.append().toString()RestTemplate 构建器
原型模式 (Prototype) 实现 Cloneable 接口并重写 clone(),用拷贝代替 new 创建对象 实现 Cloneable;Spring @Scope("prototype") 每次返回新实例

结构型模式(7种)- 解决"怎么组合类/对象"

模式名称 核心实现思路(一句话说清怎么做) Java / Spring 经典应用
适配器模式 (Adapter) 持有被适配者引用,在目标接口方法中调用被适配者的方法进行转换 InputStreamReader(字节→字符);Spring AdvisorAdapter 适配通知
桥接模式 (Bridge) 抽象类持有实现接口的引用,两者各自独立扩展,运行时组合 DriverManager 持有 Driver 实现;JDBC 驱动架构
组合模式 (Composite) 叶子节点和容器节点实现同一接口,容器节点内部持有子节点集合 AWT 的 Container / Component;Spring WebMvcConfigurer 组合配置
装饰模式 (Decorator) 装饰类持有被装饰对象的引用,在调用原方法前后 / 增强执行额外逻辑 BufferedInputStream 包裹 FileInputStream;Spring TransactionAwareCacheDecorator
外观模式 (Facade) 创建一个门面类,内部调用多个子系统的复杂方法,对外只暴露简单方法 Spring MVC 的 DispatcherServlet 统一处理请求流程
享元模式 (Flyweight) 维护一个对象池,先从池中取,取不到再创建并放入池中复用 Integer.valueOf() 缓存(-128~127);Spring 字符串常量池
代理模式 (Proxy) 代理类持有目标对象引用,在调用目标方法前后执行增强逻辑(JDK动态代理实现接口 / CGLIB继承子类) Spring AOP 的 JdkDynamicAopProxy / CglibAopProxy

行为型模式(11种)- 解决"对象间怎么交互"

模式名称 核心实现思路(一句话说清怎么做) Java / Spring 经典应用
策略模式 (Strategy) 定义策略接口,不同策略类实现该接口,使用时通过 setter / 构造器注入具体策略并调用 Comparator 接口;Spring Resource 不同实现(ClassPathResource / FileSystemResource
模板方法 (Template Method) 抽象父类定义算法骨架(模板方法),具体步骤声明为抽象方法由子类实现 JdbcTemplate 定义流程,回调接口执行具体 SQL;RestTemplate
观察者模式 (Observer) 被观察者维护观察者列表,状态变化时遍历列表通知所有观察者 Spring 事件机制:ApplicationEventPublisher 发布事件,@EventListener 监听
迭代器模式 (Iterator) 集合内部维护游标,提供 hasNext()next() 方法顺序遍历元素 java.util.Iterator 接口及所有 Collection 的实现
责任链模式 (Chain) 每个处理器持有下一个处理器的引用,请求沿链传递,直到被某个处理器处理 Servlet FilterChain;Spring Security 过滤器链
命令模式 (Command) 将请求封装成命令对象,命令对象持有接收者引用,调用命令的 execute() 触发实际执行 Runnable 接口;JdbcTemplate 执行 SQL
状态模式 (State) 上下文持有当前状态对象,状态变化时替换状态对象,行为委托给当前状态执行 Spring StateMachine 状态机;订单状态流转
备忘录模式 (Memento) 发起者创建包含内部状态的备忘录对象,由管理者保存,需要时用备忘录恢复 Serializable 序列化保存状态;Spring Web Flow 状态保存与恢复
中介者模式 (Mediator) 所有对象只与中介者通信,中介者封装对象间的交互逻辑 DispatcherServlet 协调 Controller / Model / View;消息中间件
解释器模式 (Interpreter) 定义抽象表达式接口,终结符 / 非终结符表达式类实现,构建语法树后调用解释方法 Pattern 正则解析;Spring SpEL 表达式求值
访问者模式 (Visitor) 元素类定义 accept(visitor) 方法,visitor 为每个元素定义不同的访问方法,双重分派 NIO FileVisitor;Spring BeanDefinitionVisitor 遍历 Bean 定义

快速记忆口诀

类型 口诀 模式列表
创建型(5个) 单工建原抽 单例、工厂方法、建造者、原型、抽象工厂
结构型(7个) 适桥组装外享代 适配器、桥接、组合、装饰、外观、享元、代理
行为型(11个) 策模观迭责,命状备中解访 策略、模板方法、观察者、迭代器、责任链、命令、状态、备忘录、中介者、解释器、访问者