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

【23种设计模式】分类结构有哪些?

目录

​编辑

结构型模式(Structural Patterns)

适配器模式(Adapter Pattern)

桥接模式(Bridge Pattern)

组合模式(Composite Pattern)

装饰器模式(Decorator Pattern)

外观模式(Facade Pattern)

享元模式(Flyweight Pattern)

代理模式(Proxy Pattern)

创建型模式(Creational Patterns)

单例模式(Singleton Pattern)

工厂方法模式(Factory Method Pattern)

抽象工厂模式(Abstract Factory Pattern)

建造者模式(Builder Pattern)

原型模式(Prototype Pattern)

行为型模式(Behavioral Patterns)

策略模式(Strategy Pattern)

模板方法模式(Template Method Pattern)

观察者模式(Observer Pattern)

迭代器模式(Iterator Pattern)

责任链模式(Chain of Responsibility Pattern)

命令模式(Command Pattern)

备忘录模式(Memento Pattern)

状态模式(State Pattern)

访问者模式(Visitor Pattern)


结构型模式(Structural Patterns)

结构型模式主要用于处理对象与对象之间的关系,它们通常关注如何将对象组合在一起以实现更大的结构,从而提高代码的复用性和可维护性。以下是7种结构型模式:

  1. 适配器模式(Adapter Pattern)

    • 定义:将一个类的接口转换成客户希望的另一个接口,使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

    • 应用场景:当需要使用一个已经存在的类,但其接口不符合当前需求时,可以通过适配器模式来适配接口。

    • 示例:假设有一个音频播放器接口,但现有的音频播放器只支持MP3格式,而客户需要支持VLC格式,可以通过适配器模式来实现。

  2. 桥接模式(Bridge Pattern)

    • 定义:将抽象部分与实现部分分离,使它们可以独立变化。这种模式有时也被称作“半抽象模式”,因为抽象化和实现化之间的桥接关系是半透明的。

    • 应用场景:当一个类存在两个独立变化的维度时,可以通过桥接模式将它们分离,从而提高系统的可扩展性。

    • 示例:在图形绘制系统中,图形的形状和颜色是两个独立变化的维度,可以通过桥接模式将它们分离。

  3. 组合模式(Composite Pattern)

    • 定义:将对象组合成树形结构以表示“部分-整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性。

    • 应用场景:当需要表示对象的层次结构时,可以通过组合模式来实现。

    • 示例:文件系统中的文件和文件夹,文件夹可以包含文件和其他文件夹,可以通过组合模式来管理这种层次结构。

  4. 装饰器模式(Decorator Pattern)

    • 定义:动态地给一个对象添加额外的职责,就增加功能来说,装饰器模式相比生成子类更为灵活。

    • 应用场景:当需要在不改变原有对象的基础上,动态地给对象添加功能时,可以通过装饰器模式来实现。

    • 示例:在咖啡店中,咖啡可以添加各种调料(如牛奶、糖等),可以通过装饰器模式来动态地添加这些调料。

  5. 外观模式(Facade Pattern)

    • 定义:为子系统中的一组接口提供一个一致的界面,使得子系统更容易使用。

    • 应用场景:当一个系统由多个子系统组成,且这些子系统的接口较为复杂时,可以通过外观模式来提供一个简单的接口。

    • 示例:在家庭影院系统中,用户只需要一个简单的遥控器来控制多个设备(如投影仪、音响等),可以通过外观模式来实现。

  6. 享元模式(Flyweight Pattern)

    • 定义:运用共享技术有效地支持大量细粒度的对象。

    • 应用场景:当系统中存在大量相似的对象,且这些对象的大部分状态是相同的,可以通过享元模式来减少内存的使用。

    • 示例:在文本编辑器中,字符对象可以共享其字体、大小等属性,通过享元模式来减少内存的使用。

  7. 代理模式(Proxy Pattern)

    • 定义:为其他对象提供一种代理以控制对这个对象的访问。

    • 应用场景:当需要控制对一个对象的访问时,可以通过代理模式来实现。

    • 示例:在远程调用中,可以通过代理对象来控制对远程对象的访问;在保护资源时,可以通过代理对象来控制对资源的访问。

创建型模式(Creational Patterns)

单例模式(Singleton Pattern)

  • 确保一个类只有一个实例,并提供一个全局访问点。

工厂方法模式(Factory Method Pattern)

  • 定义一个创建对象的接口,让子类决定实例化哪一个类。

抽象工厂模式(Abstract Factory Pattern)

  • 创建相关或依赖对象的家族,而不需明确指定具体类。

建造者模式(Builder Pattern)

  • 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

原型模式(Prototype Pattern)

  • 通过拷贝现有的实例来创建新的实例,而不是通过新建。

行为型模式(Behavioral Patterns

策略模式(Strategy Pattern)

  • 定义一系列算法,把它们一个个封装起来,并使它们可互换。

模板方法模式(Template Method Pattern)

  • 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。

观察者模式(Observer Pattern)

  • 对象间的一对多依赖关系,当一个对象改变状态时,所有依赖于它的对象都会得到通知并自动更新。

迭代器模式(Iterator Pattern)

  • 顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示。

责任链模式(Chain of Responsibility Pattern)

  • 使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。

命令模式(Command Pattern)

  • 将请求封装为一个对象,从而使用户可用不同的请求对客户进行参数化。

备忘录模式(Memento Pattern)

  • 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。

状态模式(State Pattern)

  • 允许一个对象在其内部状态改变时改变其行为。

访问者模式(Visitor Pattern)

  • 为一个对象结构中的对象添加新的能力。

http://www.xdnf.cn/news/421345.html

相关文章:

  • Java——集合基础
  • OpenCV中的光流估计方法详解
  • 前端面试每日三题 - Day 33
  • 深入理解BLP安全模型:信息安全中的“守密者”
  • win部署Jenkins 自动化部署发布后端项目
  • 文件操作: File 类的用法和 InputStream, OutputStream 的用法
  • 构建媲美 ChatGPT 的 AI 交互界面—OpenWebUI
  • 大模型分布式光伏功率预测实现详解
  • Linux—进度条实现
  • 开源网络地图可视化第六章学习指南
  • 【unity游戏开发——编辑器扩展】使用MenuItem自定义菜单栏拓展
  • 【ArcGIS】根据shp范围生成系列等距点:范围外等距点+渔网点(Python全代码)
  • Android之横向滑动列表
  • ETL背景介绍_1:数据孤岛仓库的介绍
  • HTTP和HTTPS模块
  • 【计算机视觉】OpenCV实战项目:基于Tesseract与OpenCV的字符识别系统深度解析
  • Flask+HTML+Jquery 文件上传下载
  • 数据库优化
  • 第一章:HTML基石·现实的骨架
  • 《Effective Python》第2章 字符串和切片操作——深入理解Python 中的字符数据类型(bytes 与 str)的差异
  • ValueError: Caught ValueError in DataLoader worker process 0.
  • Postman启动时检测到版本不匹配错误
  • stm32之PWR、WDG
  • UE5通过C++实现TcpSocket连接
  • 在SQL Server中调整查询超时j解决方案
  • STM32 启动文件分析
  • 为何选择MCP?自建流程与Anthropic MCP的对比分析
  • docker大镜像优化实战
  • Landsat 5介绍
  • 【HCIA】浮动路由