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

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于Java Springboot宠物医院微信小程序

一、作品包含 源码数据库设计文档万字PPT全套环境和工具资源部署教程 二、项目技术 前端技术:Html、Css、Js、Vue、Element-ui 数据库:MySQL 后端技术:Java、Spring Boot、MyBatis 三、运行环境 开发工具:IDEA/eclipse 微信…

Tree搜索二叉树、map和set_数据结构

数据结构专栏 如烟花般绚烂却又稍纵即逝的个人主页 本章讲述数据结构中搜索二叉树与HashMap的学习,感谢大家的支持!欢迎大家踊跃评论,感谢大佬们的支持! 目录 搜索二叉树的概念二叉树搜索模拟实现搜索二叉树查找搜索二叉树插入搜索二叉树删除…

C#使用ExcelDataReader读取Xlsx文件为DataTable对象

创建控制台项目 在NuGet中安装ExcelDataReader.DataSet 3.7.0 创建一个xlsx文件 测试代码 读取xlsx文件内容,为一个DataTable对象。 读取xlsx时,xlsx文件不能被其他软件打开,否则会报“进程无法访问此文件”的错。 using ExcelDataRead…

【JavaEE初阶】应是天仙狂醉,乱把白云揉碎 - (重点)线程

本篇博客给大家带来的是线程的知识点, 由于内容较多分几天来写. 🐎文章专栏: JavaEE初阶 🚀若有问题 评论区见 ⭐欢迎大家点赞 评论 收藏 分享 ❤❤❤ 如果你不知道分享给谁,那就分享给薯条. 你们的支持是我不断创作的动力 . 1. 认识线程 1.1 概念 )1 …

精准用户获取与私域流量运营:多商户链动 2+1 模式商城小程序的赋能策略

摘要:本文聚焦于精准用户对商业运营的核心价值,深入剖析获取精准用户的有效途径,特别围绕目标用户画像及出没场景展开分析。同时,探讨在私域流量构建进程中,多商户链动 21 模式商城小程序如何融入精准用户运营体系&…

Spring Boot教程之十一:获取Request 请求 和 Put请求

如何在 Spring Boot 中获取Request Body? Java 语言是所有编程语言中最流行的语言之一。使用 Java 编程语言有几个优点,无论是出于安全目的还是构建大型分发项目。使用 Java 的优点之一是 Java 试图借助类、继承、多态等概念将语言中的每个概念与现实世…

DVWA靶场文件包含(File Inclusion)通关教程(high级别)

目录 DVWA 靶场建立闯关 DVWA 靶场建立 需要的东西: phpStudy: 链接: phpStudy 提取码:0278 DVWA-master 链接: DVWA靶场 提取码:0278 建议在虚拟机中操作,以防数据库冲突,下面有…

基于yolov8、yolov5的铝材缺陷检测识别系统(含UI界面、训练好的模型、Python代码、数据集)

摘要:铝材缺陷检测在现代工业生产和质量管理中具有重要意义,不仅能帮助企业实时监控铝材质量,还为智能化生产系统提供了可靠的数据支撑。本文介绍了一款基于YOLOv8、YOLOv5等深度学习框架的铝材缺陷检测模型,该模型使用了大量包含…

力扣刷题TOP101:8.BM10 两个链表的第一个公共结点

目录: 目的 思路 复杂度 记忆秘诀 python代码 目的 两个无环的单向链表,它们的第一个公共结点{{6,7}。 思路 这个任务是找到两个链表的第一个公共结点。可以看作两个心机boy偷偷补课翻车事件。平时嘴上说自己在家玩游戏,实际上背地里都偷…

哪些行业对六西格玛管理方法的需求较大?

六西格玛作为一种追求极致质量和流程优化的管理哲学,自诞生以来,便在多个行业中展现出了巨大的应用价值。该方法通过定义、测量、分析、改进和控制(DMAIC)五个阶段,帮助企业实现流程的持续改进,提高产品质量…

Spring Web MVC其他扩展(详解下)

文章目录 Spring MVC其他扩展(下)异常处理异常处理机制声明式异常好处基于注解异常声明异常处理 拦截器拦截器概念拦截器使用拦截器作用位置图解拦截器案例拦截器工作原理源码 参数校验校验概述操作演示SpringMVC自定义参数验证ValueObject(VO) 文件上传…

排序学习整理(1)

1.排序的概念及运用 1.1概念 排序:所谓排序,就是使⼀串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作,以便更容易查找、组织或分析数据。 1.2运用 购物筛选排序 院校排名 1.3常见排序算法 2.实…

【linux学习指南】Linux进程信号产生(三) 硬件异常除零出错?野指针异常?core文件

文章目录 📝前言🌠模拟除0🌉除0出错?🌉野指针异常? 🌠⼦进程退出coredump🌉Core Dump 🚩总结 📝前言 硬件异常被硬件以某种⽅式被硬件检测到并通知内核,然后内核向当前…

【人工智能-科普】图神经网络(GNN):与传统神经网络的区别与优势

文章目录 图神经网络(GNN):与传统神经网络的区别与优势什么是图神经网络?图的基本概念GNN的工作原理GNN与传统神经网络的不同1. 数据结构的不同2. 信息传递方式的不同3. 模型的可扩展性4. 局部与全局信息的结合GNN的应用领域总结图神经网络(GNN):与传统神经网络的区别与…

青藤云安全携手财信证券,入选金融科技创新应用优秀案例

11月29日,由中国信息通信研究院主办的第四届“金信通”金融科技创新应用案例评选结果正式发布。财信证券与青藤云安全联合提交的“基于RASP技术的API及数据链路安全治理项目”以其卓越的创新性和先进性,成功入选金融科技创新应用优秀案例。 据悉&#x…

Python系列 - MQTT协议

Python系列 - MQTT协议 资源连接 MQTT的介绍和应用场景的示例说明 一、什么是MQTT 百度关于MQTT的介绍如下: MQTT(消息队列遥测传输)是ISO 标准(ISO/IEC PRF 20922)下基于发布订阅范式的消息协议。它工作在 TCP/IP协议之上,是为硬件性能低下的远程设…

winform跨线程更新界面

1、报错代码 下面的代码中的this.Text指的是一个winform的窗体,开启Task执行下面的代码以后直接报错,提示线程间操作无效,这是因为在WinForms应用程序中,UI元素(如控件)通常只能在创建它们的线程&#xff…

Mybatis:CRUD数据操作之多条件查询及动态SQL

Mybatis基础环境准备请看:Mybatis基础环境准备 本篇讲解Mybati数据CRUD数据操作之多条件查询 1,编写接口方法 在 com.itheima.mapper 包写创建名为 BrandMapper 的接口。在 BrandMapper 接口中定义多条件查询的方法。 而该功能有三个参数,…

音视频技术扫盲之预测编码的基本原理探究

预测编码是一种数据压缩技术,广泛应用于图像、视频和音频编码等领域。其基本原理是利用数据的相关性,通过对当前数据的预测和实际值与预测值之间的差值进行编码,从而实现数据压缩的目的。 一、预测编码的基本概念 预测编码主要包括预测器和…

5. langgraph实现高级RAG (Adaptive RAG)

1. 数据准备 from langchain.text_splitter import RecursiveCharacterTextSplitter from langchain_community.document_loaders import WebBaseLoader from langchain_community.vectorstores import Chromaurls ["https://lilianweng.github.io/posts/2023-06-23-age…