设计模式是一种被广泛应用于软件设计中的经验总结和最佳实践。以下是常见的23种设计模式及其应用场景:
- 单例模式:需要确保一个类只有一个实例时,例如配置类、数据库连接类等。
- 工厂模式:需要根据不同的参数创建不同的对象时,例如不同类型的数据库连接、日志记录器等。
- 抽象工厂模式:需要创建一组相关的对象时,例如不同类型的 UI 控件、不同类型的主题等。
- 建造者模式:需要创建复杂对象时,例如汽车、电脑、房屋等。
- 原型模式:需要创建大量相似对象时,例如游戏中的敌人、粒子等。
- 适配器模式:需要将一个类的接口转换成另一个类的接口时,例如兼容不同版本的 API、使用第三方库等。
- 桥接模式:需要将抽象部分和实现部分分离开来时,例如不同类型的图形界面控件、不同类型的数据存储方式等。
- 组合模式:需要以树形结构组织对象时,例如目录结构、图形界面中的控件等。
- 装饰器模式:需要动态地给对象添加额外的功能时,例如添加日志、缓存等。
- 外观模式:需要简化复杂系统的接口时,例如封装底层库、封装复杂的业务逻辑等。
- 享元模式:需要共享大量细粒度对象时,例如字符串池、对象池等。
- 代理模式:需要控制对原始对象的访问时,例如权限控制、远程访问等。
- 职责链模式:需要将请求发送给多个对象时,并动态确定哪个对象处理该请求时,例如日志记录器、异常处理器等。
- 命令模式:需要将操作封装成对象,并支持撤销、重做等操作时,例如 GUI 应用中的操作历史记录、文本编辑器中的撤销、重做操作等。
- 解释器模式:需要解释一种语言或表达式时,例如正则表达式、数学表达式等。
- 迭代器模式:需要遍历一个对象集合时,例如集合类、文件系统等。
- 中介者模式:需要将多个对象之间的通信进行解耦时,例如 GUI 应用中的组件之间的交互、多人游戏中的玩家之间的交互等。
- 备忘录模式:需要保存和恢复对象的状态时,例如文本编辑器中的撤销、重做操作等。
- 观察者模式:需要实现对象之间的消息通信时,例如事件驱动的 GUI 应用、发布订阅模式等。
- 状态模式:需要根据对象的状态改变其行为时,例如游戏中的角色状态、多线程中的任务状态等。
- 策略模式:需要在运行时根据不同的情况选择不同的算法时,例如排序算法、加密算法等。
- 模板方法模式:需要定义一个算法的框架,并在子类中实现具体的步骤时,例如 GUI 应用中的生命周期、游戏中的角色行为等。
- 访问者模式:需要对一组对象执行相同的操作时,例如编译器中的 AST、图形界面中的控件等。