程序设计 26种设计模式,如何分类?

1. 创建型模式 (Creational Patterns)

这些模式关注如何实例化对象。它们通过各种方式封装对象的创建过程,从而提供灵活性和可扩展性。

  • 单例模式 (Singleton):确保某个类只有一个实例,并提供全局访问点。
  • 工厂方法模式 (Factory Method):定义一个用于创建对象的接口,让子类决定要实例化的具体类。
  • 抽象工厂模式 (Abstract Factory):提供一个接口,用于创建一系列相关或相互依赖的对象,而无需指定具体类。
  • 建造者模式 (Builder):通过一步一步的构造过程,创建一个复杂对象。
  • 原型模式 (Prototype):通过复制现有对象来创建新的对象。

2. 结构型模式 (Structural Patterns)

这些模式关注如何组织和组合类或对象,以实现灵活和高效的结构设计。

  • 适配器模式 (Adapter):通过提供一个适配器类,使不兼容的接口能够相互合作。
  • 桥接模式 (Bridge):将抽象和实现分离,使得两者可以独立变化。
  • 组合模式 (Composite):将对象组合成树形结构,以表示“部分-整体”的层次结构。
  • 装饰器模式 (Decorator):动态地为对象添加额外的功能。
  • 外观模式 (Facade):提供一个统一的接口,简化子系统的使用。
  • 享元模式 (Flyweight):通过共享相同的对象,减少内存的使用。
  • 代理模式 (Proxy):为另一个对象提供代理或占位符,以控制对该对象的访问。

3. 行为型模式 (Behavioral Patterns)

这些模式关注对象之间的交互和职责分配,解决对象之间如何有效地协作和通信的问题。

  • 责任链模式 (Chain of Responsibility):通过将请求传递给一系列处理者,来实现请求的处理。
  • 命令模式 (Command):将请求封装成对象,从而可以通过不同的调用者来执行。
  • 解释器模式 (Interpreter):定义一个语言的文法,并通过解释器来解释给定的语句。
  • 迭代器模式 (Iterator):提供一种访问集合元素的方法,而不暴露集合的内部结构。
  • 中介者模式 (Mediator):通过中介者来控制不同对象之间的交互,减少耦合。
  • 备忘录模式 (Memento):在不暴露对象实现细节的情况下,保存和恢复对象的状态。
  • 观察者模式 (Observer):当对象状态改变时,自动通知依赖的对象。
  • 状态模式 (State):允许对象在其内部状态改变时改变其行为。
  • 策略模式 (Strategy):定义一系列算法,将每一个算法封装起来,并使它们可以互换。
  • 模板方法模式 (Template Method):定义一个算法的骨架,并允许子类实现某些步骤。
  • 访问者模式 (Visitor):通过访问者模式将操作与对象结构分离,允许新增操作而不修改类结构。

4. 并发型模式 (Concurrency Patterns)(扩展的设计模式)

这些模式关注多线程和并发问题,确保多个线程能够安全地协作和执行。

  • 生产者-消费者模式 (Producer-Consumer):解决生产者和消费者之间的同步问题。
  • 读写锁模式 (Read-Write Lock):允许多个读者同时访问资源,但写者访问时必须独占资源。
  • 线程池模式 (Thread Pool):通过维护多个线程池来管理并复用线程,减少频繁创建和销毁线程的开销。

5. 其他扩展模式

除了经典的 23 种设计模式,现代软件开发中,尤其是在云计算、微服务等领域,还出现了更多的设计模式,以下是一些常见的扩展模式:

  • 中介者模式 (Mediator):常用于处理复杂系统中的对象交互,减少类之间的耦合。
  • 微服务模式 (Microservice Pattern):拆分大型应用为多个独立、自治的服务,以提高系统的可维护性和可扩展性。
  • 适配器模式 (Adapter):用于不兼容的系统之间的数据交互和接口调用。
  • 过滤器模式 (Filter Pattern):对数据进行过滤处理,通常在多层数据处理过程中使用。

6.总结

根据功能的不同,设计模式通常可以分为以下几类:

  1. 创建型模式:主要关注如何实例化对象。
  2. 结构型模式:主要关注类和对象的组织结构。
  3. 行为型模式:主要关注对象之间的交互和责任分配。
  4. 并发型模式:关注多线程和并发问题的解决。
  5. 扩展模式:随着技术的发展,出现了更多适应新需求的设计模式(如微服务模式等)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/925372.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

layui-vue第三方库表格列事件怎么写

插槽写入列点击事件 <div class"le-table-box" ref"TableBoxRef" :style"{ height: ShowPage ? calc(100% - 60px) : 100% }"><lay-table row-double"dbRowClick" :columns"TableColumn" :data-source"Table…

第一个 C++ 程序 001

1. main 函数 同 c 语言的 main 函数 2. 字符和字符串 在C的 STL 中⼜引⼊了 string 来表⽰字符串&#xff0c;功能更加强⼤&#xff0c;C 语⾔不⽀持&#xff0c;后期会详细介绍。 其他的和 c 语言类似 3. 头文件 和 C 语言中的头文件一样&#xff0c;相当于一个工具箱 不过…

修改插槽样式,el-input 插槽 append 的样式

需缩少插槽 append 的 宽度 方法1、使用内联样式直接修改&#xff0c;指定 width 为 30px <el-input v-model"props.applyBasicInfo.outerApplyId" :disabled"props.operateCommandType input-modify"><template #append><el-button click…

Hot100 - 搜索二维矩阵II

Hot100 - 搜索二维矩阵II 最佳思路&#xff1a; 利用矩阵的特性&#xff0c;针对搜索操作可以从右上角或者左下角开始。通过判断当前位置的元素与目标值的关系&#xff0c;逐步缩小搜索范围&#xff0c;从而达到较高的效率。 从右上角开始&#xff1a;假设矩阵是升序排列的&a…

杂七杂八的网络安全知识

一、信息安全概述# 1.信息与信息安全# 信息与信息技术 信息奠基人&#xff1a;香农&#xff1a;信息是用来消除随机不确定性的东西 信息的定义&#xff1a;信息是有意义的数据&#xff0c;是一种要适当保护的资产。数据经过加工处理之后&#xff0c;就成为信息。而信息需要…

Vision Transformer(vit)的Embedding层结构

代码&#xff1a; class PatchEmbed(nn.Module):"""2D Image to Patch Embedding"""def __init__(self, img_size224, patch_size16, in_c3, embed_dim768, norm_layerNone):super().__init__()img_size (img_size, img_size) #图像尺寸默认22…

Spring Boot 实战:基于 Validation 注解实现分层数据校验与校验异常拦截器统一返回处理

1. 概述 本文介绍了在spring boot框架下&#xff0c;使用validation数据校验注解&#xff0c;针对不同请求链接的前端传参数据&#xff0c;进行分层视图对象的校验&#xff0c;并通过配置全局异常处理器捕获传参校验失败异常&#xff0c;自动返回校验出错的异常数据。 2. 依赖…

Linux查看网络基础命令

文章目录 Linux网络基础命令1. ifconfig 和 ip一、ifconfig命令二、ip命令 2. ss命令一、基本用法二、常用选项三、输出信息四、使用示例 3. sar 命令一、使用sar查看网络使用情况 4. ping 命令一、基本用法二、常用选项三、输出结果四、使用示例 Linux网络基础命令 1. ifconf…

Python酷库之旅-第三方库Pandas(245)

目录 一、用法精讲 1156、pandas.tseries.offsets.MonthEnd.is_month_start方法 1156-1、语法 1156-2、参数 1156-3、功能 1156-4、返回值 1156-5、说明 1156-6、用法 1156-6-1、数据准备 1156-6-2、代码示例 1156-6-3、结果输出 1157、pandas.tseries.offsets.Mon…

DAMODEL丹摩|Faster-Rcnn训练与部署实战

本文仅做测评体验&#xff0c;非广告。 文章目录 1. 丹摩介绍2. Faster-Rcnn介绍3. 准备3. 1 丹摩平台准备实例 3. 2 Faster-Rcnn4. 部署开始5. 训练5. 资源释放6. 结语 1. 丹摩介绍 详细介绍请看&#xff1a;丹摩平台介绍。 丹摩智算平台&#xff08;DAMODEL&#xff09;是…

NLP信息抽取大总结:三大任务(带Prompt模板)

信息抽取大总结 1.NLP的信息抽取的本质&#xff1f;2.信息抽取三大任务&#xff1f;3.开放域VS限定域4.信息抽取三大范式&#xff1f;范式一&#xff1a;基于自定义规则抽取&#xff08;2018年前&#xff09;范式二&#xff1a;基于Bert下游任务建模抽取&#xff08;2018年后&a…

LLM*:路径规划的大型语言模型增强增量启发式搜索

路径规划是机器人技术和自主导航中的一个基本科学问题&#xff0c;需要从起点到目的地推导出有效的路线&#xff0c;同时避开障碍物。A* 及其变体等传统算法能够确保路径有效性&#xff0c;但随着状态空间的增长&#xff0c;计算和内存效率会严重降低。相反&#xff0c;大型语言…

C#基础题总结

16.一张单据上有一个5位数的号码为6**42&#xff0c;其中百位数和千位数已模糊不清&#xff0c;但知道该数能被 57 和 67 除尽。设计一个算法&#xff0c;找出该单据所有可能的号码。 17.编程序求2&#xff5e;10000以内的完全数。一个数的因子&#xff08;除了这个数本身&…

Android数据存储——文件存储、SharedPreferences、SQLite、Litepal

数据存储全方案——详解持久化技术 Android系统中主要提供了3中方式用于简单地实现数据持久化功能&#xff0c;即文件存储、SharedPreference存储以及数据库存储。除了这三种方式外&#xff0c;还可以将数据保存在手机的SD卡中&#xff0c;不给使用文件、SharedPreference或者…

【动手学电机驱动】STM32-FOC(8)MCSDK Profiler 电机参数辨识

STM32-FOC&#xff08;1&#xff09;STM32 电机控制的软件开发环境 STM32-FOC&#xff08;2&#xff09;STM32 导入和创建项目 STM32-FOC&#xff08;3&#xff09;STM32 三路互补 PWM 输出 STM32-FOC&#xff08;4&#xff09;IHM03 电机控制套件介绍 STM32-FOC&#xff08;5&…

ubuntu 安装proxychains

在Ubuntu上安装Proxychains&#xff0c;你可以按照以下步骤操作&#xff1a; 1、更新列表 sudo apt-update 2、安装Proxychains sudo apt-get install proxychains 3、安装完成后&#xff0c;你可以通过编辑/etc/proxychains.conf文件来配置代理规则 以下是一个简单的配置示例&…

ZooKeeper 基础知识总结

先赞后看&#xff0c;Java进阶一大半 ZooKeeper 官网这样介绍道&#xff1a;ZooKeeper 是一种集中式服务&#xff0c;用于维护配置信息、命名、提供分布式同步和提供组服务。 各位hao&#xff0c;我是南哥&#xff0c;相信对你通关面试、拿下Offer有所帮助。 ⭐⭐⭐一份南哥编写…

visionpro官方示例分析(一) 模板匹配工具 缺陷检测工具

1.需求&#xff1a;找出图像中的这个图形。 2.步骤 使用CogPMAlignTool工具&#xff0c;该工具是模板匹配工具&#xff0c;见名知意&#xff0c;所谓模板匹配工具就是说先使用该工具对一张图像建立模板&#xff0c;然后用这个模板在其他图像上进行匹配&#xff0c;匹配上了就说…

代码随想录算法训练营第六十天|Day60 图论

Bellman_ford 队列优化算法&#xff08;又名SPFA&#xff09; https://www.programmercarl.com/kamacoder/0094.%E5%9F%8E%E5%B8%82%E9%97%B4%E8%B4%A7%E7%89%A9%E8%BF%90%E8%BE%93I-SPFA.html 本题我们来系统讲解 Bellman_ford 队列优化算法 &#xff0c;也叫SPFA算法&#xf…

LAMP环境的部署

一、软件安装介绍 在Linux系统中安装软件有rpm安装、yum安装、源码安装等方法&#xff0c;在这里主要给大家介绍 yum 安装&#xff0c;这是一种最简单方便的一种安装方法。 YUM&#xff08;Yellow dog Upadate Modifie&#xff09;是改进版的 RPM 管理器&#xff0c;很好地解…