
设计模式 | 2期
装饰者模式、静态代理、类适配器对比
核心意图:动态扩展功能,通过嵌套装饰器的方式为对象添加新行为(强调“增强”而非控制)
简单工厂、抽象工厂对比
1. 简单工厂模式(Simple Factory)
核心意图:
提供一个统一的工厂类,根据输入条件决定创建哪种具体产品。
(本质是将对象的实例化逻辑集中管理,避免客户端直接new
具体类。)
2. 抽象工厂模式(Abstract Factory)
核心意图:
提供一个接口,用于创建相关或依赖对象的家族(一组产品),而不需指定具体类。
(强调产品族的整体创建,例如 GUI 中的“跨平台按钮+文本框”组合。)
动态代理的核心原理
动态代理依赖于以下两个核心组件:
InvocationHandler
接口:定义代理对象的增强逻辑(如前置/后置处理)。Proxy
类:通过反射动态生成代理类实例。
动态代理 vs 静态代理
CGLIB 核心原理
继承目标类:CGLIB 通过生成目标类的子类来代理,重写父类方法。
方法拦截:通过
MethodInterceptor
接口实现方法增强(类似 JDK 的InvocationHandler
)。性能优化:CGLIB 通过 FastClass 机制直接调用方法,比反射效率更高。
CGLIB vs JDK 动态代理
组合模式(Composite Pattern)详解
组合模式(Composite Pattern)是一种 结构型设计模式,它允许你将对象组合成 树形结构 来表示“部分-整体”的层次关系,使得客户端可以 统一处理单个对象和组合对象。
1. 组合模式的核心思想
统一对待:客户端无需区分操作的是 单个对象(叶子节点)还是 组合对象(容器节点)。
递归结构:组合对象可以包含其他组合对象或叶子对象,形成树形结构。
透明性:叶子节点和容器节点实现相同的接口,客户端调用方式一致。
适用场景:
需要表示 部分-整体 的层次结构(如文件系统、菜单树、UI 组件)。
希望客户端 忽略组合对象与单个对象的差异
组合模式 vs 其他模式
享元模式(Flyweight Pattern)详解
享元模式(Flyweight Pattern)是一种 结构型设计模式,它通过 共享对象 来减少内存使用,特别适合处理大量细粒度对象的场景。
1. 享元模式的核心思想
共享对象:将对象的 可共享部分(内部状态) 和 不可共享部分(外部状态) 分离。
减少内存:通过复用共享对象,避免重复创建相似对象。
轻量化:适合处理海量小对象(如字符、图形、游戏粒子)。
适用场景:
系统需要创建 大量相似对象,导致内存消耗过高。
对象的大部分状态可以 外部化(由客户端传递)。
应用不依赖对象标识(即不关心对象是否是同一个实例)。
2.享元模式 vs 其他模式
往期文章:
- 感谢你赐予我前进的力量