✅ 1. 单例模式(Singleton)
- 定义:确保类只有一个实例,并提供全局访问点。
- 优点:节省资源、控制访问。
- 场景:数据库连接池、日志管理器、配置中心。
- 代码要点:
- 构造方法私有
- 静态变量保存唯一实例
- 公共静态方法
getInstance()
获取实例
✅ 2. 工厂模式(Factory)
- 定义:将对象创建逻辑封装,客户端通过工厂获取对象。
- 分类:简单工厂、工厂方法、抽象工厂。
- 优点:解耦、扩展性强。
- 场景:对象创建复杂、需解耦创建与使用。
- 代码要点:
- 产品接口 + 具体产品类
- 工厂类根据参数返回不同产品实例
✅ 3. 观察者模式(Observer)
- 定义:一对多依赖关系,主题状态变化自动通知所有观察者。
- 优点:松耦合、广播通信。
- 场景:事件系统、消息推送、发布订阅模型。
- 代码要点:
Subject
管理观察者列表Observer
接口定义更新方法- 状态变化时调用
notifyObservers()
✅ 4. 策略模式(Strategy)
- 定义:封装一系列算法,使它们可互相替换。
- 优点:避免 if-else、提高扩展性。
- 场景:排序策略、支付方式、资源调度。
- 代码要点:
- 策略接口定义算法行为
- 上下文类持有策略对象
- 运行时动态切换策略
✅ 5. 适配器模式(Adapter)
- 定义:将一个接口转换为另一个接口,使不兼容类协同工作。
- 优点:复用旧代码、符合开闭原则。
- 场景:集成第三方库、接口不兼容。
- 代码要点:
- 目标接口 + 被适配类
- 适配器类实现目标接口并持有被适配对象
✅ 6. 装饰器模式(Decorator)
- 定义:动态地为对象添加额外功能,不改变原结构。
- 优点:比继承更灵活、支持组合扩展。
- 场景:日志包装、缓存包装、权限控制。
- 代码要点:
- 组件接口 + 具体组件
- 装饰器抽象类持有组件对象
- 具体装饰器扩展功能
✅ 7. 代理模式(Proxy)
- 定义:为其他对象提供代理以控制访问。
- 优点:延迟加载、权限控制、日志记录。
- 场景:权限校验、远程调用、缓存代理。
- 代码要点:
- 接口定义行为
- 真实类实现接口
- 代理类实现接口并控制对真实对象的访问
✅ 8. 外观模式(Facade)
- 定义:为复杂子系统提供统一的高层接口。
- 优点:简化客户端调用、降低耦合。
- 场景:封装复杂API、整合多个服务调用。
- 代码要点:
- 多个子系统类
- 外观类封装子系统调用流程
- 客户端只与外观类交互
✅ 9. 模板方法模式(Template Method)
- 定义:定义算法骨架,将具体步骤延迟到子类实现。
- 优点:复用流程、扩展灵活。
- 场景:支付流程、GUI事件处理、产品组装线。
- 代码要点:
- 抽象类定义模板方法(final)
- 子类实现可变步骤
- 钩子方法可选覆盖
🔍 总结速查表
模式名称 | 关键词 | 典型场景 |
---|---|---|
单例 | 唯一实例 | 配置中心、日志器 |
工厂 | 对象创建解耦 | 创建复杂对象、依赖注入 |
观察者 | 一对多通知 | 消息推送、事件系统 |
策略 | 动态切换算法 | 排序、支付、调度 |
适配器 | 接口转换 | 第三方库集成 |
装饰器 | 动态增强功能 | 日志、缓存、权限包装 |
代理 | 控制访问 | 权限代理、延迟加载 |
外观 | 简化复杂接口 | 封装子系统、统一API入口 |
模板方法 | 流程复用 | 支付流程、GUI事件、组装线 |