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

news2024/12/27 3:03:18

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. 扩展模式:随着技术的发展,出现了更多适应新需求的设计模式(如微服务模式等)。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Linux服务器】CPU问题排查

概述 总体排查思路 总体观察,htop命令观察系统负载程度 检查CPU占用高的进程检查CPU硬件信息是否为问题根源从宏观到细节分析系统IO情况最后检查系统日志 排查思路 系统负载 通过htop命令查看系统负载,通过系统负载可以判断系统是否繁忙,主…

详解MyBatis之篇一

目录 MyBatis 定义 使用MyBatis操作数据库 创建项目 配置 演示 UserInfo.java UserInfoMapper UserInfoMapperTest 数据准备 自动生成测试类 运行结果 MyBatis 定义 MyBatis 是一个优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避…

编译器优化技术

方法内联 逃逸分析 公共子表达式消除 数据边界检查消除

汽车IVI中控开发入门及进阶(三十五):架构QML App Architecture Best Practices

在Qt/QML工程的架构中,架构很重要,虽然本身它有分层,比如QML调用资源文件(图片等)显示GUI界面,后面的CPP文件实现界面逻辑,但是这个分类还有点粗。在实际开发中,界面逻辑也就是基于类cpp的实现,也开始使用各种面向对象的设计模式,实现更加优秀的开发架构,这点尤其在…

本地Docker部署个人在线音乐平台Melody结合内网穿透远程访问听音乐

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

异常--C++

文章目录 一、异常的概念及使用1、异常的概念2、异常的抛出和捕获3、栈展开4、查找匹配的处理代码5、异常重新抛出6、异常安全问题7、异常规范 二、标准库的异常 一、异常的概念及使用 1、异常的概念 异常处理机制允许程序中独立开发的部分能够在运行时就出现的问题进行通信并…

字符串p型编码

字符串p型编码 C 语言实现C 实现Java 实现Python 实现 💐The Begin💐点点关注,收藏不迷路💐 给定一个完全由数字字符(‘0’,‘1’,‘2’,…,‘9’)构成的字符串str,请写出str的p型编码串。例如&…

UIlicious - 自动化端到端测试

在现代软件开发中,测试自动化已然成为产品交付质量的基石。而端到端测试(E2E),作为验证整个应用流畅运行的关键,常常是测试工作中最具挑战性的一环。这时,一款简单高效的自动化测试工具——UIlicious&#…

机器学习:机器学习项目的完整周期

建立一个有价值的机器学习系统时,需要考虑和计划哪些步骤? 以语音识别为例演示机器学习项目的全周期:机器学习项目的第一步是对项目进行范围划分,即决定什么是项目和你想做什么,然后是收集数据,所以决定需…

浪潮X86服务器NF5280、8480、5468、5270使用inter VROC Raid key给NVME磁盘做阵列

Inter VROC技术简介 Intel Virtual RAID on CPU (Intel VROC) 简单来说就是用CPU的PCIE通道给NVME硬盘做Raid 更多信息可以访问官方支持页面 Raid Key 授权,即VROC SKU 授权主要有用的有2个标准和高级,仅Raid1的授权我暂时没见过。 标准 VROCSTANMOD …

ROS基本框架2——在ROS开发中创建并使用自定义消息(C++版本)

ROS基本框架2——在ROS开发中创建并使用自定义消息(C++版本) code review! 参考笔记 1.ROS基本框架1——编写简单的发布者和订阅者(C++和Python版本) 2.ROS基本框架2——在ROS开发中创建并使用自定义消息(C++版本) 文章目录 ROS基本框架2——在ROS开发中创建并使用自定义…

鸿蒙征文|鸿蒙技术分享:使用到的开发框架和技术概览

目录 每日一句正能量前言正文1. 开发环境搭建关键技术:2. 用户界面开发关键技术:3. 应用逻辑开发关键技术:4. 应用测试关键技术:5. 应用签名和打包关键技术:6. 上架流程关键技术:7. 后续维护和更新关键技术…

(长期更新)《零基础入门 ArcGIS(ArcMap) 》实验二----网络分析(超超超详细!!!)

相信实验一大家已经完成了,对Arcgis已进一步熟悉了,现在开启第二个实验 ArcMap实验--网络分析 目录 ArcMap实验--网络分析 1.1 网络分析介绍 1.2 实验内容及目的 1.2.1 实验内容 1.2.2 实验目的 2.2 实验方案 2.3 实验流程 2.3.1 实验准备 2.3.2 空间校正…

go语言 Pool实现资源池管理数据库连接资源或其他常用需要共享的资源

go Pool Pool用于展示如何使用有缓冲的通道实现资源池,来管理可以在任意数量的goroutine之间共享及独立使用的资源。这种模式在需要共享一组静态资源的情况(如共享数据库连接或者内存缓冲区)下非 常有用。如果goroutine需要从池里得到这些资…

马铃薯病害识别(VGG-16复现)

VGG16-Pytorch实现马铃薯病害识别 🍨 本文为🔗365天深度学习训练营 中的学习记录博客 🍖 原作者:K同学啊 电脑系统:Windows11 显卡型号:NVIDIA Quadro P620 语言环境:python 3.9.7 编译器&am…

HCSIF: 中国区域2000-2022年高时空分辨率(500m)SIF数据集

日光诱导叶绿素荧光(Solar-induced chlorophyll fluorescence, SIF)被誉为“植被光合作用的探针”。2017年,搭载在Sentinel-5P卫星上的 TROPOMI (TROPOspheric Monitoring Instrument)传感器成功发射,该卫星同时具有高…

STL:相同Size大小的vector和list哪个占用空间多?

在C中,vector和list是两种不同的序列容器。vector底层是连续的内存,而list是非连续的,分散存储的。因此,vector占用的空间更多,因为它需要为存储的元素分配连续的内存空间。 具体占用多少空间,取决于它们分…

蓝牙设备驱动开发

文章目录 一、蓝牙协议架构二、蓝牙协议的HCI传输层三、编程框架 一、蓝牙协议架构 蓝牙是无线数据和语音传输的开放式标准,它将各种通信设备、计算机及其终端设备、各种数字数据系统、甚至家用电器采用无线方式联接起来。它的传输距离为10cm~10m&#…

【计算机网络】实验7:默认路由和特定主机路由以及路由环路问题

实验 7:默认路由和特定主机路由以及路由环路问题 一、 实验目的 了解默认路由以及特定主机路由。 了解静态路由配置错误导致的路由环路问题。 二、 实验环境 • Cisco Packet Tracer 模拟器 三、 实验内容 1、默认路由以及特定主机路由 (1) 第一步&#xff…

安装 RabbitMQ 服务

安装 RabbitMQ 服务 一. RabbitMQ 需要依赖 Erlang/OTP 环境 (1) 先去 RabbitMQ 官网,查看 RabbitMQ 需要的 Erlang 支持:https://www.rabbitmq.com/ 进入官网,在 Docs -> Install and Upgrade -> Erlang Version Requirements (2) …