一、创建型模式(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)的访问。
四、总结
- 创建型:解决对象创建的复杂性,如单例、工厂。
- 结构型:优化类 / 对象的组合,如适配器、装饰器。
- 行为型:规范对象间的交互逻辑,如策略、观察者。
设计模式的选择需结合具体场景,其核心目标是提高代码的可维护性 、可扩展性 和复用性。