23种设计模式
目录
23种设计模式
一、创建型模式(Creational Patterns)
聚焦对象创建过程,简化复杂对象的实例化。
单例模式(Singleton)
- 定义 :确保一个类仅有一个实例,并提供全局访问点。
- 示例 :日志管理器、配置中心。
工厂模式(Factory Method)
- 定义 :定义创建对象的接口,由子类决定实例化哪个类。
- 示例 :根据用户类型创建不同的用户对象。
抽象工厂模式(Abstract Factory)
- 定义 :提供一个创建一系列相关或依赖对象的接口,无需指定具体类。
- 示例 :跨平台 UI 组件库(如鸿蒙、Android、iOS 的按钮工厂)。
建造者模式(Builder)
- 定义 :分步构建复杂对象,分离构造与表示。
- 示例 :配置一个包含多个参数的网络请求对象。
原型模式(Prototype)
- 定义 :通过克隆现有对象创建新对象,避免重复初始化。
- 示例 :游戏中快速复制角色对象。
二、结构型模式(Structural Patterns)
关注类和对象的组合,优化系统结构。
适配器模式(Adapter)
- 定义 :将一个类的接口转换为另一个接口,使不兼容的类可以协同工作。
- 示例 :将旧版本的 API 适配到新系统中。
桥接模式(Bridge)
- 定义 :分离抽象与实现,使两者可以独立变化。
- 示例 :将 UI 组件的抽象类与具体渲染实现分离。
装饰器模式(Decorator)
- 定义 :动态添加功能到对象,避免继承的局限性。
- 示例 :给图片加载组件添加缓存、压缩等功能。
组合模式(Composite)
- 定义 :将对象组合成树形结构,统一处理单个对象和组合对象。
- 示例 :文件系统中的目录和文件管理。
外观模式(Facade)
- 定义 :为子系统提供统一接口,简化复杂子系统的使用。
- 示例 :支付系统的统一接口封装(支付宝、微信支付等)。
享元模式(Flyweight)
- 定义 :共享细粒度对象,减少内存消耗。
- 示例 :游戏中大量重复的子弹、粒子效果对象。
代理模式(Proxy)
- 定义 :为其他对象提供代理以控制访问。
- 示例 :网络请求的代理缓存、权限控制。
三、行为型模式(Behavioral Patterns)
处理对象间的交互和职责分配。
策略模式(Strategy)
- 定义 :定义算法族,使它们可互换,策略的变化独立于使用它的客户。
- 示例 :电商平台的促销策略(满减、折扣、赠品)。
责任链模式(Chain of Responsibility)
- 定义 :将请求传递给处理者链,直到有一个处理者响应。
- 示例 :请假审批流程(员工→主管→经理)。
命令模式(Command)
- 定义 :将请求封装为对象,支持撤销、重做等操作。
- 示例 :文本编辑器的撤销 / 重做功能。
迭代器模式(Iterator)
- 定义 :提供遍历集合元素的统一接口,隐藏集合内部结构。
- 示例 :遍历列表、树结构等数据集合。
中介者模式(Mediator)
- 定义 :用中介对象封装对象间的交互,减少对象间的直接依赖。
- 示例 :聊天系统中用户间的消息传递。
备忘录模式(Memento)
- 定义 :捕获对象状态并保存,以便恢复。
- 示例 :游戏进度保存与恢复。
观察者模式(Observer)
- 定义 :对象间的一对多依赖,当对象状态变化时通知所有依赖者。
- 示例 :股票价格实时更新通知。
状态模式(State)
- 定义 :对象行为随状态改变而变化,状态作为独立类。
- 示例 :订单状态机(待支付→已支付→已发货)。
模板方法模式(Template Method)
- 定义 :定义算法骨架,子类实现具体步骤。
- 示例 :HTTP 请求的模板(预处理→发送→后处理)。
访问者模式(Visitor)
- 定义 :将数据结构与操作分离,允许在不修改数据结构的前提下添加新操作。
- 示例 :文档解析器支持多种格式(HTML、Markdown)的访问。
四、总结
- 创建型 :解决对象创建的复杂性,如单例、工厂。
- 结构型 :优化类 / 对象的组合,如适配器、装饰器。
- 行为型 :规范对象间的交互逻辑,如策略、观察者。
设计模式的选择需结合具体场景,其核心目标是提高代码的 可维护性 、 可扩展性 和 复用性 。