23种设计模式的分类和应用场景总结【设计模式】

news2024/11/25 1:00:05

23种设计模式的分类和应用场景总结【设计模式】

  • 设计模式分类
    • 创建型模式
    • 结构型模式
    • 行为型模式
  • 设计模式的几种原则
  • 应用场景总结
  • 各种模式的详细介绍
    • 创建型模式

设计模式分类

23种设计模式可以分为三大类:创建型模式、结构型模式和行为型模式。

创建型模式

🍊创建型模式:提供了一种创建对象的最佳方式。这些模式涉及到如何实例化对象,并且隐藏了实例化的细节。创建型模式包括:

  • 工厂模式(Factory Pattern)
  • 抽象工厂模式(Abstract Factory Pattern)
  • 建造者模式(Builder Pattern)
  • 原型模式(Prototype Pattern)
  • 单例模式(Singleton Pattern)

结构型模式

🍋结构型模式:主要关注类和对象的组合。结构型模式描述如何将类或对象按某种布局组成更大的结构。结构型模式包括:

  • 适配器模式(Adapter Pattern)
  • 桥接模式(Bridge Pattern)
  • 组合模式(Composite Pattern)
  • 装饰器模式(Decorator Pattern)
  • 外观模式(Facade Pattern)
  • 享元模式(Flyweight Pattern)
  • 代理模式(Proxy Pattern)

行为型模式

🍏行为型模式:主要关注对象之间的通信。行为型模式描述了类和对象如何交互,以及他们的行为是怎样的。行为型模式包括:

  • 职责链模式(Chain of Responsibility Pattern)
  • 命令模式(Command Pattern)
  • 解释器模式(Interpreter Pattern)
  • 迭代器模式(Iterator Pattern)
  • 中介者模式(Mediator Pattern)
  • 备忘录模式(Memento Pattern)
  • 观察者模式(Observer Pattern)
  • 状态模式(State Pattern)
  • 策略模式(Strategy Pattern)
  • 模板方法模式(Template Method Pattern)
  • 访问者模式(Visitor Pattern)

设计模式的几种原则

设计模式通常遵循以下几个原则:

  • 单一职责原则(Single Responsibility Principle):一个类或方法应该只负责一项职责。
  • 开放封闭原则(Open-Closed Principle):一个软件实体应该对扩展开放,对修改关闭。
  • 里氏替换原则(Liskov Substitution Principle):所有引用基类的地方都可以替换成子类。
  • 接口隔离原则(Interface Segregation Principle):多个特定的接口比一个通用的接口更好。
  • 依赖倒置原则(Dependency Inversion Principle):高层模块不应该依赖于低层模块,二者都应该依赖于抽象。

应用场景总结

设计模式是一种在软件设计中用于解决常见问题的方法。它们提供了一组可重用的设计,可以被用来解决软件设计中的各种问题。下面是23种常见的设计模式,以及它们的适用场景:

🍊1️⃣工厂模式:在这种模式中,一个类用于创建另一个类的实例。这种模式适用于在不知道具体实现细节的情况下创建对象的场景。

🍊2️⃣抽象工厂模式:这种模式提供了一种方法来创建相关或依赖对象的家族,而不需要指定它们的具体类。它适用于需要创建多个不同类型的对象的场景。

🍊3️⃣单例模式:这种模式确保某个类只有一个实例,并提供一个全局访问点来访问它。这种模式适用于需要控制实例数量的场景。

🍊4️⃣建造者模式:这种模式允许将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。它适用于需要生成复杂对象的场景。

🍊5️⃣原型模式:这种模式是通过复制一个现有对象来生成新对象的。它适用于需要快速创建大量同类对象的场景。

🍋6️⃣代理模式:这种模式为另一个对象提供了一个替身或占位符,以便控制对这个对象的访问。它适用于需要在访问某个对象时增加额外控制的场景。

🍋7️⃣适配器模式:这种模式允许将一个类的接口转换成另一个接口,以便于不兼容的类可以一起工作。它适用于需要让两个不兼容的类一起工作的场景。

🍋8️⃣桥接模式:这种模式将抽象部分和实现部分分离,以便它们可以独立变化。它适用于需要将一个类的抽象部分和实现部分独立改变的场景。

🍋9️⃣组合模式:这种模式允许将对象组成树形结构来表现“整体/部分”层次结构。它适用于需要表示树形结构的场景。

🍋1️⃣0️⃣装饰模式:这种模式允许在不改变现有对象的情况下动态地给它们添加新的职责。它适用于需要动态地为对象添加新职责的场景。

🍋1️⃣1️⃣外观模式:这种模式提供了一个统一的接口,用来访问子系统中的一群接口。它适用于需要为一个复杂的子系统提供一个简单的接口的场景。

🍋1️⃣2️⃣享元模式:这种模式允许共享对象,以便最大限度地减少内存占用。它适用于需要在多个地方共享大量细粒度对象的场景。

🍏1️⃣3️⃣策略模式:这种模式定义了一组算法,并将它们封装起来,使它们可以相互替换。它适用于需要在不同情况下使用不同算法的场景。

🍏1️⃣4️⃣模板方法模式:这种模式定义了一个操作中的算法骨架,而将一些步骤延迟到子类中。它适用于需要在不改变算法结构的情况下重定义算法中的某些步骤的场景。

🍏1️⃣5️⃣观察者模式:这种模式定义了对象之间的一对多依赖,以便当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。它适用于需要在对象之间松散耦合的场景。

🍏1️⃣6️⃣迭代器模式:这种模式提供了一种方法来访问一个容器对象中各个元素,而又不暴露该对象的内部细节。它适用于需要为容器对象提供多种遍历方式的场景。

🍏1️⃣7️⃣中介者模式:这种模式用一个中介对象来封装一系列的对象交互,使各对象不需要显式地相互引用,从而使耦合松散,而且可以独立地改变它们之间的交互。它适用于需要在多个对象之间松散耦合的场景。

🍏1️⃣8️⃣解释器模式:这种模式定义了一个语言的文法,并且建立一个解释器来解释该语言中的句子。它适用于需要定义一个语言并为该语言实现一个解释器的场景。

🍏1️⃣9️⃣状态模式:这种模式允许一个对象在其内部状态改变时改变它的行为。它适用于需要根据对象的状态来改变它的行为的场景。

🍏2️⃣0️⃣访问者模式:这种模式把作用于某个对象结构中各元素的操作分离出来封装成独立的类,使其在不改变各元素的类的前提下可以添加作用于这些元素的新操作。它适用于需要在不改变各元素的类的前提下定义对这些元素的新操作的场景。

🍏2️⃣1️⃣命令模式:这种模式将一个请求封装为一个对象,以便使用不同的请求、队列或日志来参数化其他对象。它适用于需要支持命令的撤销和恢复、延迟调用或日志操作的场景。

🍏2️⃣2️⃣责任链模式:这种模式为请求创建了一个接收者对象的链,每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,它会把相同的请求传给下一个接收者,依此类推。它适用于需要在多个对象之间松散耦合的场景,并且希望在不明确指定接收者的情况下,向多个对象中的一个提交一个请求的场景。

🍏2️⃣3️⃣备忘录模式:这种模式提供了一种方法来在不破坏封装性的情况下获取一个对象的内部状态,并在需要的时候将对象恢复到先前的状态。

以上就是23种常见的设计模式的应用场景。这些模式都有各自的优点和适用场景,可以在适当的时候使用它们来解决软件设计中的问题。

各种模式的详细介绍

创建型模式

🍕工厂模式

版权声明:
原创博主:牛哄哄的柯南
博主原文链接:https://keafmd.blog.csdn.net/
个人博客链接:https://www.keafmd.top/

看完如果对你有帮助,感谢点击下面的点赞支持!
[哈哈][抱拳]

在这里插入图片描述
加油!

共同努力!

Keafmd

感谢支持牛哄哄的柯南,期待你的三连+关注~~

keep accumulate for my dream【共勉】

                                                       ↓   ↓   ↓   ↓   ↓   ↓  

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

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

相关文章

(附源码)SSM高考志愿智能选择系统 毕业设计 134565

SSM高考志愿智能选择系统 摘 要 高中教育的普及使得每年高考人数攀升,与此同时,信息不对称会使部分考生处于劣势,造成获录学校或专业性价比不高、报录比偏低、复读率增高、考研热等问题。针对这些情况,本文设计并实现了高考志愿智…

【时钟识别】Hough变换指针式时钟识别【含GUI Matlab源码 2085期】

⛄一、简介 1 仪表示数识别流程 基于刻度准确定位的指针式仪表示数识别方法包括预处理、指针检测、刻度定位、油位计表盘中心拟合与仪表读数计算5个部分。该方法无需预先添加任何表盘信息,算法流程如图2所示。整个流程分为两步且同时进行——第1步,将油位计图像进行灰度化和边…

DPDK技术原理概述

DPDK 基本技术指标准的 DPDK 数据平面开发包和 I/O 转发实现技术,本次将概述该部分的主要技术原理。 1 技术原理与架构 由于采用软件转发和软件交换技术,单服务器内部的转发能力是 NFV 系统的主要性能瓶颈。在各类高速转发的 NFV 应用中,数…

赣货通全球桥接江西制造全球开花,贸易强国供应链出海江西在奋进

“赣货通全球”平台是什么? “赣货通全球”平台是江西制造进入全球供应链的数字贸易平台,平台免费为江西制造打造永不落幕线上国际化“赣品展”。核心的后台功能为企业用户提供大数据获客及营销功能,同时为企业提供贸易全流程的第三方外贸综合服务&…

Ubuntu18.04复现mmdetection3d

文章目录一、环境搭建二、测试demo三、数据预处理四、训练参考一、环境搭建 从零配置深度学习环境参考:ubuntu18.04 AnnacondaCUDA10.2CuDNN7.6.5使用anaconda创建虚拟环境 conda create -n open-mmlab3d python3.8 conda activate open-mmlab3d安装torch 先从官网…

自然语言处理竞赛相关比赛项目、比赛经验、工具、算力平台资源分享

本资源主要收录NLP竞赛经验贴、通用工具、学习资料等,本项目源于2020年7月一次竞赛的经历,当时在找参考资料时遇到了很多困难,包括内容分散、质量不高等。2021年3月开始更新本项目,志在帮助NLPer提升模型性能。2021年6月开放本项目…

大一Web课程设计 基于HTML家乡主题网页项目的设计与实现——中国牡丹之都山东菏泽(6页)

家乡旅游景点网页作业制作 网页代码运用了DIV盒子的使用方法,如盒子的嵌套、浮动、margin、border、background等属性的使用,外部大盒子设定居中,内部左中右布局,下方横向浮动排列,大学学习的前端知识点和布局方式都有…

MySQL高级【索引概述索引结构】

目录 索引概述 无索引演示:一种表没有索引的查找方式 有索引演示:以二叉树进行演示 索引的优缺点 索引结构 二叉树: B-Tree(多路平衡查找树) BTree树 Hash数据结构 索引概述 索引它是一种有序的数据结构&…

测开真的是测试工程师的发展终点吗?

前言 在一线大厂,没有测试这个岗位,只有测开这个岗位,即使是做业务测试,那么你的title也是测开。 所以想聊一聊测开的看法,但不代表这是正确的看法,仅供参考。 没来阿里之前我对测开的看法 一直以为专职…

Docker入门 --- 简单安装及部署

Docker的简单安装及部署 文章目录Docker的简单安装及部署一、Docker概述1. 什么是Docker2. Docker架构3. DockerHub4. Docker运行模式5. Docker和虚拟机的区别二、安装Docker1. 环境准备2. 安装3. 配置镜像加速器三、Docker服务、镜像、容器命令1. 服务(进程)相关命令2. 镜像相…

【大数据处理技术】「#2」Hive数据分析

文章目录操作Hive简单查询分析测试简单指令查询条数统计分析关键字条件查询分析以关键字的存在区间为条件的查询根据用户行为分析用户实时查询分析操作Hive 启动Hive在“hive>”命令提示符状态下执行下面命令: hive> use dbtaobao; # 使用dbtaobao数据库 hi…

1.7 TCP粘包、缺包问题解决

文章目录1、TCP粘包问题1.1、客户端粘包现象1.2、服务端粘包1.3、粘包、缺包解决2、包头设计1、TCP粘包问题 1.1、客户端粘包现象 因为客户端有一个优化算法(Nagle), send(“abc”); send(“123”); send(“def”); 如果这三次发送非常紧密时间非常短,会…

一、Endnote简介

一、简介 1.Edit-Preference-Libraries:设置默认打开时的操作。(默认打开最近一次) 2.文献库的建立File-New 生成一个数据库文件和一个文件夹 3.在线数据库搜索 (1)设置不同的检索字段: (2&am…

零基础小白想学Python爬虫,但是不理解原理?5分钟带你理顺思路

很多人私信我,说自己是0基础学习Python,但是学爬虫的时候不太理解这个原理,下面我来给大家分享一下我的对Python爬虫的原理。 首先我们要知道什么是Python爬虫? 我们可以把互联网看成是各种信息的站点及网络设备在一起组成的一…

UG/NX二次开发Siemens官方NXOPEN实例解析—2.1 AssemblyViewer

列文章目录 UG/NX二次开发Siemens官方NXOPEN实例解析—2.1 AssemblyViewer 目录 列文章目录 前言 一、知识点提取汇总 二、案例需求分析 1、最终效果图 2、需求分解 三、程序分析 1、源码所在目录 2、主要功能分析 前言 随着工业智能化的不断发展,UG二次开发…

[1]物联网基础知识

前言 学习教程:B站太极创客,原教程采用的开发板为ESP8266,开发环境Arduino 本人使用开发板:ESP32S3,开发环境Vscode中的platformio,框架为Arduino 乐鑫科技:ESPRESSIF 注意:引脚…

机器人开发--CanOpen

机器人开发--CanOpen1 介绍1.1 概述1.2 应用2 历史发展3 协议3.1 协议细节(来自CiA文档)3.2 协议框架OSI 模型服务COB-IDNMTSYNC紧急事件对象 (EMCY)服务数据对象 (SDO)SDO 下载SDO 上传SDO 加速写传输报文过程数据对象PDO3.3 应用细节(伺服电…

基于springboot+mybatis+mysql+layui员工工资管理系统

基于springbootmybatismysqllayui员工工资管理系统一、目的二、需求功能划分系统结构设计软件界面截图三、系统开发配置一、目的 ​ 运用JavaEE企业级系统开发、数据库系统、面向对象技术及UML以及软件需求工程所学专业知识,解决所设定业务领域软件开发中的需求分析…

2021一带一路暨金砖大赛之企业信息系统安全赛项AWD_writeup

更多详情私聊博主 订阅专栏解锁更多~~觉得不错麻烦点个赞~~~ AWD_writeup 主要考点:后门账户、数据库操作、cve漏洞、后门漏洞、自动化攻击 1、解法一 ssh弱口令账户 用户登录后cat /etc/passwd 发现系统存在额外账户 使用msf进行ssh爆破尝试 msfconsole use auxiliary/sca…

洛谷 最长公共子序列

LCS 题面翻译 题目描述: 给定一个字符串 sss 和一个字符串 ttt ,输出 sss 和 ttt 的最长公共子序列。 输入格式: 两行,第一行输入 sss ,第二行输入 ttt 。 输出格式: 输出 sss 和 ttt 的最长公共子序…