当前位置: 首页 > article >正文

GOF设计模式中各模式支持的可变方面(封装变化)

GOF(Gang of Four)设计模式中,每种模式都旨在解决特定类型的问题,并通过封装变化来提高代码的可维护性和灵活性。以下是各模式支持的可变方面(封装变化)的详细说明:

1. 创建型模式(Creational Patterns)

这类模式关注对象的创建机制,试图封装对象创建过程中的变化。

1.1 单例模式(Singleton Pattern)
  • 封装变化:确保一个类只有一个实例,并提供一个全局访问点。
  • 应用场景:全局配置、日志记录、数据库连接池等。
1.2 工厂方法模式(Factory Method Pattern)
  • 封装变化:将对象的创建延迟到子类中实现。
  • 应用场景:不同产品类型的创建,如图形界面中的按钮、对话框。
1.3 抽象工厂模式(Abstract Factory Pattern)
  • 封装变化:提供一个接口,用于创建一系列相关或依赖的对象,而不指定具体的类。
  • 应用场景:多个产品系列(如不同操作系统下的UI组件)的创建。
1.4 建造者模式(Builder Pattern)
  • 封装变化:将复杂对象的构建过程与其表示分离,使得同样的构建过程可以创建不同的表示。
  • 应用场景:复杂对象的创建过程,如文档生成、画图算法。
1.5 原型模式(Prototype Pattern)
  • 封装变化:通过克隆现有对象来创建新对象,而不是通过标准构造函数。
  • 应用场景:对象创建成本高、需要避免构造函数调用的情况。

2. 结构型模式(Structural Patterns)

这类模式关注类和对象的组合,通过封装对象之间的组合关系来提高灵活性。

2.1 适配器模式(Adapter Pattern)
  • 封装变化:将一个类的接口转换成客户端期望的另一个接口。
  • 应用场景:使不兼容的接口可以一起工作。
2.2 桥接模式(Bridge Pattern)
  • 封装变化:将抽象部分与实现部分分离,使它们可以独立变化。
  • 应用场景:有两个独立变化维度的系统,如图形编辑器中的形状和颜色。
2.3 组合模式(Composite Pattern)
  • 封装变化:将对象组合成树形结构以表示“部分-整体”的层次结构。
  • 应用场景:处理递归结构的数据,如文件系统、组织结构。
2.4 装饰器模式(Decorator Pattern)
  • 封装变化:动态地给对象添加职责,而不修改其代码。
  • 应用场景:需要在不改变对象结构的情况下扩展其功能。
2.5 外观模式(Facade Pattern)
  • 封装变化:为子系统中的一组接口提供一个统一的接口,简化其使用。
  • 应用场景:简化复杂子系统的使用,如操作系统的API。
2.6 享元模式(Flyweight Pattern)
  • 封装变化:通过共享技术有效地支持大量细粒度的对象。
  • 应用场景:需要大量相似对象,如文本编辑器中的字符渲染。
2.7 代理模式(Proxy Pattern)
  • 封装变化:为其他对象提供一个代理以控制对这个对象的访问。
  • 应用场景:控制对象的访问,如远程代理、虚拟代理。

3. 行为型模式(Behavioral Patterns)

这类模式关注对象之间的职责分配,通过封装对象之间的交互和通信来提高灵活性。

3.1 责任链模式(Chain of Responsibility Pattern)
  • 封装变化:将请求的发送者和接收者解耦,允许多个对象都有机会处理该请求。
  • 应用场景:处理请求的多个处理器,如日志记录、权限检查。
3.2 命令模式(Command Pattern)
  • 封装变化:将请求封装为对象,从而使请求的发送者和接收者解耦。
  • 应用场景:实现撤销、重做、事务处理,如图形界面中的菜单项。
3.3 解释器模式(Interpreter Pattern)
  • 封装变化:定义语言的文法,并提供解释器来解释该语言。
  • 应用场景:解析和执行特定语言的表达式,如SQL查询。
3.4 迭代器模式(Iterator Pattern)
  • 封装变化:提供一种方法顺序访问一个聚合对象中的各个元素,而不暴露其内部表示。
  • 应用场景:集合类的遍历,如列表、树等。
3.5 中介者模式(Mediator Pattern)
  • 封装变化:用一个中介对象来封装一系列的对象交互,使对象之间不直接相互作用。
  • 应用场景:复杂的对象交互,如聊天室、GUI组件交互。
3.6 备忘录模式(Memento Pattern)
  • 封装变化:在不破坏封装性的前提下,捕获并恢复一个对象的内部状态。
  • 应用场景:实现撤销、重做功能,如文本编辑器的撤销操作。
3.7 观察者模式(Observer Pattern)
  • 封装变化:定义对象间的一对多依赖关系,当一个对象状态改变时,所有依赖它的对象都得到通知并自动更新。
  • 应用场景:事件处理系统、数据绑定、发布-订阅系统。
3.8 状态模式(State Pattern)
  • 封装变化:允许对象在其内部状态改变时改变其行为。
  • 应用场景:状态驱动的系统,如有限状态机、工作流系统。
3.9 策略模式(Strategy Pattern)
  • 封装变化:定义一系列算法,并将每个算法封装起来,使它们可以互换。
  • 应用场景:算法选择,如排序、支付方式选择。
3.10 模板方法模式(Template Method Pattern)
  • 封装变化:定义算法的骨架,将某些步骤延迟到子类中实现。
  • 应用场景:算法的固定结构和可变部分,如文档生成、游戏引擎。
3.11 访问者模式(Visitor Pattern)
  • 封装变化:在不改变元素类的前提下定义新的操作。
  • 应用场景:扩展元素类的操作,如编译器中的语法树遍历。

总结

GOF设计模式通过封装变化来提高代码的灵活性和可维护性。每种模式都针对特定类型的变化,提供了相应的解决方案。理解这些模式及其封装的变化方面,可以帮助开发者在面对复杂的设计问题时,选择合适的模式来解决问题。


http://www.kler.cn/a/394257.html

相关文章:

  • websocket初始化
  • Spring Boot中的自动装配机制
  • 大数据新视界 -- 大数据大厂之 Impala 存储格式转换:从原理到实践,开启大数据性能优化星际之旅(下)(20/30)
  • 1111111111待修改--大流量分析(三)-BUUCTF
  • Window下PHP安装最新sg11(php5.3-php8.3)
  • docker:docker: Get https://registry-1.docker.io/v2/: net/http: request canceled
  • 远程链接mysql步骤
  • UE5.4 PCG 生成藤蔓墙体
  • Hbase小测
  • 基于Java Springboot快递物流管理系统
  • Leetcode 56-合并区间
  • [JAVAEE] 面试题(五) - HashMap, Hashtable, ConcurrentHashMap
  • 如何确定光伏建设中的最佳安装倾角
  • day08|计算机网络重难点之 DNS查询过程、CDN是什么,有什么作用?、Cookie和Session是什么?有什么区别?
  • 【CSS】opacity 影响 z-index 不生效
  • 【Java语言】String类
  • Spring源码(十二):Spring MVC之Spring Boot
  • PPT技巧:如何合并PPT文件?
  • SpringBoot+MyBatis+MySQL的Point实现范围查找
  • MATLAB用CNN-LSTM神经网络的语音情感分类深度学习研究
  • [DDNS][SSL][HTTPS]阿里云ACME Ubuntu22.04Server 安装教程
  • Mysql每日一题(行程与用户,困难※)
  • Vue3 项目权限控制最佳实践
  • 消息队列系列一:RabbitMQ入门讲解
  • git 提交报错 Error updating changes: bad signature 0x00000000index file corrupt
  • STM32编程遇到的问题随笔【一】