23种设计模式概述

2023-11-18

设计模式共有23种,创建型模式5种,结构型模式7种,行为型模式11种,本章只做概念性说明。

(一) 创建型模式

01 工厂模式

定义:又叫做静态工厂方法,定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂模式使得一个类的实例化延迟到子类。
在这里插入图片描述

02 抽象工厂模式

定义:提供一个创建系列相关或相互依赖对象的接口,而无需指定他们具体的类。
在这里插入图片描述

03 原型模式

定义:用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象。
适用场景:相似对象,只是对象属性有差异,通过对象的深复制或浅复制构建新对象,直接应用;

在这里插入图片描述

04 单例模式

定义:保证一个类只有一个实例,并提供一个访问它的全局访问点。
在这里插入图片描述

05 建造者模式

定义:将一个复杂对象的构建与他的表示分离,使得同样的过程可以创建不同的表示。
在这里插入图片描述

(二)结构型模式

01 适配器模式

定义:将一个类的接口转换成客户希望的另外一个接口。该模式使得原本接口不兼容而不能一起工作的类可以一起工作。
在这里插入图片描述

02 桥接模式

定义:将抽象部分与他的实现分离,使得他们都可以独立的变化。
在这里插入图片描述

03 组合模式

定义:将对象组合成树形结构以表示“整体-部分”的层次结构,使得用户对单个对象和组合对象的使用具有一致性。
在这里插入图片描述

04 装饰模式

定义:动态的给一个对象添加一些额外的职责。就增加功能来说,装饰模式比生成子类更加灵活。
在这里插入图片描述

05 外观模式

定义:为子系统种的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得子系统更加容易使用。
在这里插入图片描述

06 享元模式

定义:为运用共享技术有效地支持大量细粒度的对象。
在这里插入图片描述

07 代理模式

定义:为其他对象提供一种代理以控制对这个对象的访问。
在这里插入图片描述

(三)行为型模式

01 观察者模式

定义:定义对象间一种一对多的依赖关系,当一个对象的状态发生变化时,所有依赖于它的对象都得到通知并被自动更新。
场景案例:消息中心、订阅处理等。
在这里插入图片描述

02 模板方法模式

定义:定义一个操作算法骨架,而讲一些步骤延迟到子类种,模板方法使得子类可以不改变一个子算法的结构,而重定义该算法的某些特定步骤。
场景案例:算法设计,算法流程固定的。
在这里插入图片描述

03 命令模式

定义:将一个请求封装为一个对象,从而可以使你可用不同的请求对客户进行参数化;可以对请求排队或记录请求日志,以及支持可撤销的操作。
场景案例:饭店点餐系统
在这里插入图片描述

04 状态模式

定义:允许一个对象在其内部状态改变时改变它的行为,让对象看起来似乎修改了它的类。
场景案例:状态多分支。
在这里插入图片描述

05 职责链模式

定义:使多个对象都有机会处理请求,从而避免请求的发送者与接受者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。
场景案例:简单流程,如审批、请销假、待办等。
在这里插入图片描述

06 解释器模式

定义:给定一个语言,定义他的文法的一种表示,并定义个解释器,这个解释器使用该表示来解释语句种的句子。
在这里插入图片描述

07 中介者模式

定义:用一个中介对象来封装一系列对象交互。中介者使得各对象不需要显示的相互交互,从而使其耦合松散,而且可以独立的改变他们之间的交互。
场景案例:房屋中介交易。
在这里插入图片描述

08 访问者模式

定义:表示一个作用于某对象结构种的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。
在这里插入图片描述

09 策略模式

定义:定义一些列算法,把他们一个个封装起来,并且使他们可以相互替换。本模式使得算法可以独立于使用它的客户而变化。
在这里插入图片描述

10 备忘录模式

定义:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象外保存这个状态。这样以后就可以将该对象恢复到原先保存的状态。
场景案例:游戏进度存档、文件保存回档等。
在这里插入图片描述

11 迭代器模式

定义:提供一种方法顺序访问一个聚合对象种的各个元素,而又不许暴露该对象的内部表示。
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

23种设计模式概述 的相关文章

随机推荐

  • 服务器系统能耗,服务器能耗怎么计算

    服务器能耗怎么计算 内容精选 换一换 DESS磁盘扩容成功后 需要在裸金属服务器的操作系统中对扩容部分的磁盘分配分区 已登录裸金属服务器 详细操作请参见 裸金属服务器用户指南 中章节 登录Windows裸金属服务器 已挂载磁盘至裸金属服务器
  • JS实现约瑟夫环

    传说罗马人占领了乔塔帕特 41 个犹太人被围堵在一个山洞里 他们拒绝被俘虏 而决定集体自杀 大家决定了一个自杀方案 41 个人围成一个圈 由第 1 个人开始顺时针报数 每报数为 3 的人立刻自杀 然后再由下一个人重新从 1 开始报数 依旧是
  • 笔记本电脑微信视频对方却听不到声音

    我真的是把网上的所有教程 试遍了都没弄好 我自己突发奇想要不然更新下 结果就成功了 首先可以先看看是不是微信版本的原因 麦克风出现问题了 右击我的电脑 gt 属性 gt 设备管理器 gt 音频输入和输出 gt 右击麦克风 gt 更新驱动程序
  • 数值分析Matlab二维正态(高斯)分布以及协方差矩阵

    数值分析Matlab二维正态 高斯 分布以及协方差矩阵 主要是使用了matlab的mvnrnd产生随机的正态 高斯 分布二维矩阵 然后绘制出来 代码运行结果生成的正态分布实验数据如图 MATLAB代码 mu1 0 0 sigma1 4 2
  • ACM输入输出

    写在前面 主要记录一下ACM输入输出的写法 一 输入数值 1 给定N的定长多行输入 题目 https ac nowcoder com acm contest 5657 B 代码 include
  • 【Java】基于朴素贝叶斯算法破解基于哈希表的随机字符替换加密算法

    Java 基于朴素贝叶斯算法破解基于哈希表的随机字符替换加密算法 不用看了 这篇文章是错的 得出的结果也不是正确的结果 我想错了 因为这个解密算法的前提是已经知道哈希表的情况下去计算的 而实际上应该是只靠统计去分析密文 所以实际破解所需要的
  • Unity模型导入相关知识

    文章目录 常见的模型格式 模型导入参数设置 Model页签 Scene设置 Meshes设置 Geometry设置 Rig页签 Animation Type 动画类型 Avatar化身信息设置 Animation页签 基础信息设置 动画剪辑
  • 童年回忆——切水果(内含源码inscode一键运行)

    前言 作者主页 雪碧有白泡泡 个人网站 雪碧的个人网站 推荐专栏 java一站式服务 React从入门到精通 前端炫酷代码分享 从0到英雄 vue成神之路 uniapp 从构建到提升 从0到英雄 vue成神之路 解决算法 一个专栏就够了 架
  • vue项目中使用pdf.js预览pdf文件

    项目要求需要预览pdf文件 网上找了很久 大多数都是推荐pdf js 自己起了解了一下 最后决定用pdf js 但是发现 在vue中使用这个很少 所以我就写这一篇帮助一下vue使用pdfjs的朋友 其实 这和前端框架无关的 直接使用pdf
  • 网络模拟(Network_simulation)

    https en wikipedia org wiki Network simulation In computer network research network simulation is a technique whereby a
  • CocoaPods创建管理类库的步骤

    用到的命令 1 git clone https github com jackLeong MySDK git 克隆一份远程仓库 2 git add fileName 把文件纳入git的缓存区 可使用 代替目录下的所有文件 3 git sta
  • Android 13 - Media框架(5)- NuPlayerDriver

    前面的章节中我们了解到上层调用setDataSource后 MediaPlayerService Client IMediaPlayer 会调用MediaPlayerFactory创建MediaPlayerBase Android为我们提供
  • 第3讲 Camera Sensor 数据流

    Camera Sensor Block Camera Sensor Output Format raw8 一个像素点用8bit来表示 范围0 256 raw10 一个像素点用10bit来表示 范围0 1024 raw12 一个像素点用12b
  • 数字化转型需要解决的五大问题

    更多专业文档请访问 www itilzj com 数字化 数字中国被列为十四五规划的核心之一 数字经济席卷各行各业 新一轮的商业马拉松枪声已经响起 无形的革新重塑着商业大环境 也赋予了我们丰富的想象空间 数字化转型需要解决的问题包括 1 解
  • Unity --- 文本的使用

    1 先讲讲legacy 旧版 的文本text 在一个画布上创建一个文本 这个文本也是一个游戏物体 且是画布的子物体 上面这个就是文本的inspector界面 在字体参数处我们可以点开框框选择新的字体资源 前提是我们有导入这个字体资源 行间距
  • MySQL之添加联合唯一索引

    一 联合唯一索引 项目中需要用到联合唯一索引 例如 有以下需求 每个人每一天只有可能产生一条记录 处了程序约定之外 数据库本身也可以设定 例如 t aa 表中有aa bb两个字段 如果不希望有2条一模一样的记录 即 aa字段的值可以重复 b
  • visio2016上下标

    之前的visio版本是有上下标的快捷按钮的 但是在visio2016中没有了 需要选中文字之后在 字体 选项卡 点击右下角的小箭头 在 位置 中选择上下标 或者使用快捷键 选中要成为上标的文字 ctrl shift 选中要成为下标的文字 c
  • Windows下修改VSCode工作区存储目录workspaceStorage

    VSCode会将每个工作区的一些配置 扩展 缓存等保存在一个默认的目录 在Windows下 此默认目录为 AppData Code User workspaceStorage 当存在多个工作空间或扩展时 需要使用大量的磁盘空间 而VSCod
  • EMC经典问答85问(75-77问)

    75 某个手持测试产品 可以电池供电 同时也可以采取外置适配器供电方式 适配器单独带负载辐射发射 RE 测试可以通过 手持产品在电池供电情况下辐射发射 RE 也可以通过 并且余量都比较大 但是在带外置适配器的情况下 却在 160M 频率左右
  • 23种设计模式概述

    设计模式共有23种 创建型模式5种 结构型模式7种 行为型模式11种 本章只做概念性说明 一 创建型模式 01 工厂模式 定义 又叫做静态工厂方法 定义一个用于创建对象的接口 让子类决定实例化哪一个类 工厂模式使得一个类的实例化延迟到子类