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

创建型设计模式、结构型设计模式与行为型设计模式 上下文任务通用方案 设计模式 大全

在这里插入图片描述

设计模式(Design Pattern)是一种面向对象编程思想,分为创建型模式、结构型模式与行为型模式三大类,提供在特定上下文中解决常见任务通用方案,旨在让程序(软件)具有更好特点,如降低耦合性、提高内聚性、增强可维护性、可扩展性、重用性和灵活性等。设计模式主要分为以下三种类型:

创建型模式:主要用于创建对象,提供灵活的方式来创建对象,将对象的创建与使用分离,提供了更高的灵活性和可维护性。常见的创建型模式包括简单工厂模式、工厂方法模式、抽象工厂模式、建造者模式、原型模式、单例模式等。

结构型模式:主要用于解决对象之间组合关系、接口定义和实现等结构性问题。结构型模式关注对象之间的组合和关联关系,以及如何通过这些关系来构建更大的结构。常见的结构型模式包括外观模式、适配器模式、代理模式、装饰模式、桥接模式、组合模式、享元模式等。

行为型模式:主要用于描述程序在运行时复杂的流程控制,即描述多个类或对象之间怎样相互协作共同完成单个对象都无法单独完成的任务。行为型模式关注对象之间的通信和交互方式,以及如何有效地管理和组织对象的行为。常见的行为型模式包括模板方法模式、观察者模式、状态模式、策略模式、职责链模式、命令模式、访问者模式、调停者模式、备忘录模式、迭代器模式、解释器模式等。

一、创建型模式(Creational Patterns)

  1. 单例模式(Singleton Pattern)

    • 定义:确保一个类只有一个实例,并提供一个全局访问点。
    • 应用场景:配置管理器、连接池管理、日志记录器等。
    • 优点:保证全局只有一个实例,节省内存;提供全局访问点,方便管理。
    • 缺点:如果实例化过程复杂,可能会导致性能问题;难以并行化。
  2. 工厂模式(Factory Pattern)

    • 定义:一种创建对象的模式,将对象的创建过程封装起来,使代码更加灵活和可维护。
    • 分类
      • 简单工厂模式:一个工厂类根据输入参数返回不同的产品实例。
      • 工厂方法模式:定义一个创建对象的接口,让子类决定实例化哪一个类。
      • 抽象工厂模式:定义一个创建一系列相关或相互依赖对象的接口,而不必指定它们具体的类。
    • 应用场景:对象创建过程复杂、需要灵活地添加新的产品类、需要创建一系列相关或相互依赖的对象。
    • 优点:将对象的创建和使用分离,提高代码的可维护性和可扩展性;可以灵活地添加新的产品类。
    • 缺点:增加了系统的复杂度;如果产品类层次结构复杂,实现起来比较困难。
  3. 建造者模式(Builder Pattern)

    • 定义:将一个复杂对象的构建过程与其表示分离,使同样的构建过程可以创建不同的表示。
    • 应用场景:创建对象的构建过程比较复杂,而且需要创建不同表示时。
    • 优点:使构建过程更加清晰,易于理解和管理;可以创建复杂对象的不同表示。
    • 缺点:增加了代码量,需要定义多个类。
  4. 原型模式(Prototype Pattern)

    • 定义:通过复制原型对象的方式创建新对象,而无需知道其具体的实现细节。
    • 应用场景:对象的创建过程比较复杂或者对象的初始化过程需要耗费大量时间。
    • 优点:提高对象创建的性能;避免复杂对象的初始化过程。
    • 缺点:需要维护一个原型对象集合,可能增加内存开销。

二、结构型模式(Structural Patterns)

  1. 适配器模式(Adapter Pattern)

    • 定义:将一个类的接口转换成客户希望的另一个接口。
    • 应用场景:需要使用一个已经存在的类,但其接口与系统中的其他接口不匹配时。
    • 优点:使原本接口不兼容的类可以一起工作;提高了代码的复用性。
    • 缺点:增加了代码复杂性,需要创建适配器类。
  2. 装饰器模式(Decorator Pattern)

    • 定义:动态地给一个对象添加一些额外的职责。
    • 应用场景:需要在不修改现有对象结构的情况下,动态地给对象添加功能。
    • 优点:比生成子类方式更为灵活;可以动态地扩展对象的功能。
    • 缺点:可能导致过多的装饰器层级,增加代码复杂性。
  3. 代理模式(Proxy Pattern)

    • 定义:为另一个对象提供一个替身或占位符以控制对这个对象的访问。
    • 应用场景:需要实现对象的延迟初始化、控制对对象的访问、实现日志记录等功能。
    • 优点:控制对真实对象的访问;提高代码的安全性和灵活性。
    • 缺点:增加了系统的复杂度;如果代理对象过多,可能导致性能问题。
  4. 外观模式(Facade Pattern)

    • 定义:提供了一个统一的接口,用来访问子系统中的一群接口。
    • 应用场景:需要简化复杂系统的接口并提供一个统一的入口点时。
    • 优点:隐藏了子系统的复杂性;提供了一个简化的接口。
    • 缺点:可能会违背单一职责原则,导致外观对象过于庞大。
  5. 桥接模式(Bridge Pattern)

    • 定义:将抽象部分与实现部分分离,使它们可以独立变化。
    • 应用场景:当一个类存在多个维度的变化时,可以使用桥接模式来将这些维度进行分离。
    • 优点:提高了系统的灵活性和可扩展性。
    • 缺点:增加了代码复杂性,需要定义多个类。
  6. 组合模式(Composite Pattern)

    • 定义:将对象组合成树形结构以表示“部分-整体”的层次结构。
    • 应用场景:需要表示对象的层次结构,并且希望客户统一处理单个对象和组合对象时。
    • 优点:客户可以统一处理单个对象和组合对象;提高了代码的复用性。
    • 缺点:限制了组合对象的类型,可能导致设计过度。
  7. 享元模式(Flyweight Pattern)

    • 运用共享技术有效地支持大量细粒度的对象。
    • 通过共享来减少对象的数量,从而提高性能。

三、行为型模式(Behavioral Patterns)

  1. 策略模式(Strategy Pattern)

    • 定义:定义了一系列的算法,并将每一个算法封装起来,使它们可以互换。
    • 应用场景:需要根据不同的条件选择不同的算法、算法需要经常变化或扩展、需要将算法的实现细节隐藏起来。
    • 优点:算法和客户端分离,提高了代码的可维护性和可扩展性。
    • 缺点:策略类的数量可能会增加,导致类的膨胀。
  2. 观察者模式(Observer Pattern)

    • 定义:定义了对象之间的一对多依赖关系,当一个对象状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。
    • 应用场景:事件监听机制、发布/订阅系统、GUI组件之间的交互。
    • 优点:实现了主题和观察者之间的解耦;提高了代码的可维护性和可扩展性。
    • 缺点:如果观察者数量过多,可能会导致性能问题。
  3. 命令模式(Command Pattern)

    • 定义:将一个请求封装为一个对象,从而使用户可用不同的请求对客户进行参数化。
    • 应用场景:需要实现命令的封装和执行、实现命令的队列和撤销功能。
    • 优点:实现了命令的封装和执行的分离;提高了代码的可维护性和可扩展性。
    • 缺点:可能会导致类的数量增加,使系统变得复杂。
  4. 迭代器模式(Iterator Pattern)

    • 定义:提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示。
    • 应用场景:需要遍历一个聚合对象,并且希望客户端代码与集合的具体实现解耦时。
    • 优点:支持以不同的方式遍历聚合对象;提高了代码的复用性和灵活性。
    • 缺点:需要实现迭代器接口,增加了代码复杂性。
  5. 中介者模式(Mediator Pattern)

    • 定义:用一个中介对象来封装一系列的对象交互。
    • 应用场景:多个对象之间存在复杂的交互关系,并且希望通过一个中介者来管理这些交互关系时。
    • 优点:使对象之间的交互更加清晰和简单;降低了系统的复杂性。
    • 缺点:增加了代码复杂性,中介者对象可能会变得庞大。
  6. 模板方法模式(Template Method Pattern)

    • 定义:在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。
    • 应用场景:在父类中定义算法的框架,在子类中实现具体的步骤。
    • 优点:定义了一个算法的框架,提高了代码的可复用性和可扩展性。
    • 缺点:子类的扩展可能会影响算法的整体结构。
  7. 状态模式(State Pattern)

    • 定义:允许对象在内部状态改变时改变它的行为。
    • 应用场景:对象的行为随其内部状态的变化而变化时。
    • 优点:将状态相关的行为封装在状态类中;提高了代码的可维护性和可读性。
    • 缺点:增加了类的数量;状态类可能会变得复杂。
  8. 责任链模式(Chain of Responsibility Pattern)

    • 定义:使多个对象都有机会处理请求,从而避免了请求的发送者和接收者之间的耦合关系。
    • 应用场景:有多个对象可以处理同一个请求,并且处理器之间的顺序可以灵活调整时。
    • 优点:降低了请求的发送者和接收者之间的耦合度;提高了系统的灵活性。
    • 缺点:可能导致请求的处理链过长,难以调试和定位错误。
  9. 访问者模式(Visitor Pattern)

    • 定义:将数据结构和对数据的操作分离,使得可以在不改变数据结构的前提下定义新的操作。
    • 应用场景:需要对一个复杂的对象结构中的不同元素执行不同的操作时。
    • 优点:增加了新的操作很容易,无需修改已有的类;提高了代码的复用性和可扩展性。
    • 缺点:需要在数据结构中添加访问者接受方法,增加了代码复杂性。
  10. 备忘录模式(Memento Pattern)

    • 定义:在不破坏封装的前提下,捕获并保存对象的内部状态,以便后续恢复。
    • 应用场景:需要保存和恢复对象的状态时。
  11. 解释器模式(Interpreter Pattern)

    • 给定一个语言,定义它的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子。
    • 实现了特定语法规则的解释和执行。

综上所述,设计模式涵盖了创建型模式、结构型模式和行为型模式三大类,共包括23种具体的设计模式。每种设计模式都有其特定的应用场景和优缺点,开发者可以根据实际需求选择合适的设计模式来提高代码的可复用性、灵活性和可扩展性。

在这里插入图片描述


http://www.mrgr.cn/news/82133.html

相关文章:

  • Ubuntu22.04双系统安装记录
  • neo4j学习笔记
  • 【AI部署】腾讯云每月1w小时免费GPU获取
  • 计算机网络原理(谢希仁第八版)第3章课后习题答案
  • Python 爬虫
  • Redis 中 Lua 脚本的使用详解
  • Unity Excel转Json编辑器工具
  • GeekPad 智慧屏连接到VirtualBox的Ubuntu虚拟机上的Home-Assistant
  • 曾仕强解读《易经》
  • win32汇编环境下,对话框程序中生成listview列表控件,点击标题栏自动排序的示例
  • canvas+fabric实现时间刻度尺(一)
  • C进阶-字符串与内存函数介绍(另加2道典型面试题)
  • Oracle 11g 中 MODEL语法使用 详解
  • 2024年度学习总结
  • Linux 内核调试
  • 30天开发操作系统 第 10 天 -- 叠加处理
  • GRAPE——RLHF微调VLA模型:通过偏好对齐提升机器人策略的泛化能力(含24年具身模型汇总)
  • win32汇编环境下,提取对话框程序中,listview列表控件里的内容示例
  • 设计模式 创建型 单例模式(Singleton Pattern)与 常见技术框架应用 解析
  • 点跟踪基准最早的论文学习解读:TAP-Vid: A Benchmark for Tracking Any Point in a Video—前置基础
  • win32汇编环境下,双击窗口程序内生成的listview列表控件的某行,并提取其内容的示例程序
  • 溢出概念总结
  • 基于深度学习的视觉检测小项目(二) 环境和框架搭建
  • MIT Cheetah 四足机器人的动力学及算法 (I) —— 简化动力学模型
  • GeekPad 连接到VirtualBox的Ubuntu虚拟机上的Home-Assistant
  • win32汇编环境下,窗口程序中生成listview列表控件及显示