设计模式分类

不同设计模式的复杂程度、 细节层次以及在整个系统中的应用范围等方面各不相同。 我喜欢将其类比于道路的建造: 如果你希望让十字路口更加安全, 那么可以安装一些交通信号灯, 或者修建包含行人地下通道在内的多层互通式立交桥。

最基础的、 底层的模式通常被称为惯用技巧。 这类模式一般只能在一种编程语言中使用。

最通用的、 高层的模式是构架模式。 开发者可以在任何编程语言中使用这类模式。 与其他模式不同, 它们可用于整个应用程序的架构设计。

此外, 所有模式可以根据其意图或目的来分类。 本书覆盖了三种主要的模式类别:

  • 创建型模式提供创建对象的机制, 增加已有代码的灵活性和可复用性。

  • 结构型模式介绍如何将对象和类组装成较大的结构, 并同时保持结构的灵活和高效。

  • 行为模式负责对象间的高效沟通和职责委派。

一 、行为模式

行为模式 负责对象间的 高效沟通职责委派

1. ​责任链 - Chain of Responsibility

允许你将请求沿着处理者链进行发送。 收到请求后, 每个处理者均可对请求进行处理, 或将其传递给链上的下个处理者。

2. ​命令 - Command

它可将请求转换为一个包含与请求相关的所有信息的独立对象。 该转换让你能根据不同的请求将方法参数化、 延迟请求执行或将其放入队列中, 且能实现可撤销操作。

3. ​迭代器 - Iterator

让你能在不暴露集合底层表现形式 (列表、 栈和树等) 的情况下遍历集合中所有的元素。

4. ​中介者 - Mediator

能让你减少对象之间混乱无序的依赖关系。 该模式会限制对象之间的直接交互, 迫使它们通过一个中介者对象进行合作。

5. 备忘录 - Memento

允许在不暴露对象实现细节的情况下保存和恢复对象之前的状态。

6. ​观察者 - Observer

允许你定义一种订阅机制, 可在对象事件发生时通知多个 “观察” 该对象的其他对象。

​7. 状态 - State

让你能在一个对象的内部状态变化时改变其行为, 使其看上去就像改变了自身所属的类一样。

8. 策略 - Strategy

能让你定义一系列算法, 并将每种算法分别放入独立的类中, 以使算法的对象能够相互替换。

​9. 模板方法 - Template Method

在超类中定义一个算法的框架, 允许子类在不修改结构的情况下重写算法的特定步骤。

10. 访问者 - Visitor

将算法与其所作用的对象隔离开来。

​二、创建型模式

创建型模式 提供了 创建对象的机制, 能够提升已有代码的 灵活性可复用性

1. ​工厂方法 - Factory Method

在父类中提供一个创建对象的接口以允许子类决定实例化对象的类型。

​2. 抽象工厂 - Abstract Factory

让你能创建一系列相关的对象, 而无需指定其具体类。

​3. 生成器 - Builder

使你能够分步骤创建复杂对象。 该模式允许你使用相同的创建代码生成不同类型和形式的对象。

​4. 原型 - Prototype

让你能够复制已有对象, 而又无需使代码依赖它们所属的类。

​5. 单例 - Singleton

让你能够保证一个类只有一个实例, 并提供一个访问该实例的全局节点。

三、结构型模式

结构型模式 介绍 如何将 对象 和 类 组装成较大的结构, 并同时保持结构的 灵活 和 高效

1. 适配器 - Adapter


让接口不兼容的对象能够相互合作。

2. 桥接 - Bridge


可将一个大类或一系列紧密相关的类拆分为抽象和实现两个独立的层次结构, 从而能在开发时分别使用。

3. 组合 - Composite


你可以使用它将对象组合成树状结构, 并且能像使用独立对象一样使用它们。

4. 装饰 - Decorator


允许你通过将对象放入包含行为的特殊封装对象中来为原对象绑定新的行为。

5. 外观 - Facade


能为程序库、 框架或其他复杂类提供一个简单的接口。

6. 享元 - Flyweight


摒弃了在每个对象中保存所有数据的方式, 通过共享多个对象所共有的相同状态, 让你能在有限的内存容量中载入更多对象。

7. 代理 - Proxy


让你能够提供对象的替代品或其占位符。 代理控制着对于原对象的访问, 并允许在将请求提交给对象前后进行一些处理。

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

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

相关文章

音视频直播核心技术

直播流程 采集: 是视频直播开始的第一个环节,用户可以通过不同的终端采集视频,比如 iOS、Android、Mac、Windows 等。 前处理:主要就是美颜美型技术,以及还有加水印、模糊、去噪、滤镜等图像处理技术等等。 编码&#…

vue中监听Form表单值的变化

想要监听From表单中某个值的变化需要用到vue中的 watch watch: {inputForm.isHeating() {this.inputForm.otherHeating}}, isHeating是表单中的某个值,如果他变化就会清空另一个值

泛微OA C# 调用 WebAPI功能实现

泛微OA C# 调用 WebAPI功能实现 OA 在线文档地址1. 创建流程字段参数 mainData 简单说明字段表明细表2. 接口封装2.1 接口初始化2.2 接口注册2.3 获取Token2.4 拼装 Headers2.5 常用工作流方法2.5.1 创建2.5.2 删除2.5.3 撤回2.5.4 退回3. 接口调用OA 在线文档地址 Token认证 …

12.21_黑马数据结构与算法笔记Java

//最近在复习,,java的进度会比较慢一些 目录 219 排序算法 基数排序2 220 排序算法 java排序 221 排序 e01 根据另一个数组次序排序 222 排序 e02 根据出现频率排序 thinking:关于比较器 223 排序 e03 最大间距 解法1(超出内…

快速学习 webpack

目录 1. webpack基本概念 webpack能做什么? 2. webpack的使用步骤 2.1_webpack 更新打包 3. webpack的配置 3.1_打包流程图 3.2_案例-webpack隔行变色 3.3_插件-自动生成html文件 3.4_加载器 - 处理css文件问题 3.5_加载器 - 处理css文件 3.6_加载器 - 处…

Linux文件目录结构与术语

/ 下的目录(图形化界面样式) Linux常用术语: 1.目录 -> 在Windows中叫文件夹 2.路径 -> 在Windows中叫文档所在的位置(如:文档hello.txt所在的位置是Winodws中的 D:\www文件夹下,也可以描述为:helllo.txt所在的路径是C:\www…

使用PE信息查看工具和Beyond Compare文件比较工具排查dll文件版本不对的问题

目录 1、问题说明 2、修改了代码,但安装版本还是有问题 3、使用PE信息查看工具查看音视频库文件(二进制)的时间戳 4、使用Beyond Compare比较两个库文件的差异 5、找到原因 6、最后 C软件异常排查从入门到精通系列教程(专栏…

uniapp中使用封装步骤条组件

针对步骤条封装完终于清清楚楚啦 先看效果&#xff1a; 附上代码&#xff1a;使用可直接复用&#xff1a;数据是写在了当前组件中&#xff0c;如有必须&#xff0c;可以使用其中的props传值stepInfos传递相应的数据&#xff0c;根据steps步数就可以控制走到哪一步啦 <temp…

SpaceDesk如何连接平板/PC(生产力副屏)

1、下载安装 分为安卓端和PC端&#xff0c;两个设备都需要安装对应的软件。 SpaceDesk官网 https://link.zhihu.com/?targethttp%3A//spacedesk.net/ 需要魔法上网。安装过程比较简单&#xff0c;无脑下一步即可。 我已经把安装包准备好了&#xff0c;如果不想自己找&#…

k8s之共享存储pvpvc

目录 1.1 存储资源管理 1.2 持久卷pv的类型 1.3 实验mysql基于NFS共享存储实现持久化存储 1.3.1 安装NFS 1.3.2 PV参数详解 1.3.3 创建pv 1.3.4 mysql使用pvc持久卷 1.4 动态绑定pv 1.4.1 配置nfs-provisioner授权 1.4.2 部署nfs-client-provisioner 1.4.3 创建Stor…

CentOS7 安装 DockerCompose

目录 一、安装Docker 二、安装步骤 2.1 卸载 2.2 安装docker 2.3 启动docker 2.4 配置镜像加速器 一、安装Docker Docker 分为 CE 和 EE 两大版本。 CE 即社区版(免费&#xff0c;支持周期7个月)EE 即企业版强调安全&#xff0c;付费使用&#xff0c;支持周期 24 个月…

Altium Designer切换中文界面与英文界面的方法图文教程及视频演示

目录 视频演示1&#xff0c;概述2&#xff0c;汉化切换为中文界面3&#xff0c;切换为英文界面4&#xff0c;总结 视频演示 Altium Designer软件汉化方法 欢迎点击浏览更多高清视频演示 1&#xff0c;概述 Altium Designer支持汉化界面&#xff0c;本文演示Altium Designer软件…

中奖记录设计(策略+模板)

背景 最近需求要做一个活动需求,用户只要参与活动就可以获得奖励,奖励分为以下几种: 创角奖励: 用户在活动内的游戏创建角色即可中奖 等级奖励: 角色在游戏内级别达到某一个级别即可中奖 VIP级别奖励: 角色在游戏内VIP级别达到某一个级别即可中奖 排行榜奖励: 角色某一天充值榜…

nodejs连接mongodb报错SyntaxError: Unexpected token .

nodejs连接mongodb报错SyntaxError: Unexpected token 如下图 经过排查&#xff0c;原因是npm默认安装的mongodb插件是最新版6.3.0 &#xff0c;而mongodb数据库版本是4.0.0 &#xff0c;两者版本不同导致nodejs报错。 解决方法是npm卸载新版本的mongodb插件&#xff0c;再安…

【Java探索之旅】我与Java的初相识(二):程序结构与运行关系和JDK,JRE,JVM的关系

&#x1f3a5; 屿小夏 &#xff1a; 个人主页 &#x1f525;个人专栏 &#xff1a; Java入门到精通 &#x1f304; 莫道桑榆晚&#xff0c;为霞尚满天&#xff01; 文章目录 &#x1f4d1;前言一. 第一个Java程序1.1 main方法1.2 Java的程序结构 二. Java程序的运行三. JDK、JR…

Achronix提供由FPGA赋能的智能网卡(SmartNIC)解决方案来打破智能网络性能极限

作者&#xff1a;Achronix 随着人工智能/机器学习&#xff08;AI/ML&#xff09;和其他复杂的、以数据为中心的工作负载被广泛部署&#xff0c;市场对高性能计算的需求持续飙升&#xff0c;对高性能网络的需求也呈指数级增长。高性能计算曾经是超级计算机这样一个孤立的领域&a…

20 Vue3中使用v-for遍历普通数组

概述 使用v-for遍历普通数组在真实开发中还是比较常见的。 基本用法 我们创建src/components/Demo20.vue&#xff0c;代码如下&#xff1a; <script setup> const tags ["JavaScript", "Vue3", "前端"] </script> <template…

(1)(1.10) SiK Radio v1

文章目录 前言 1 概述 2 连接无线电台 3 参数说明 前言 本文介绍了如何将 3DR Radio v1 连接到飞行控制器。你还应阅读 SiK Radio v2&#xff0c;其中包含更详细的用户指南和功能列表。 1 概述 3DR 无线电设备是在自动驾驶仪和地面站之间建立遥测连接的最简单方法。 3DR…

大数据---34.HBase数据结构

一、HBase简介 HBase是一个开源的、分布式的、版本化的NoSQL数据库&#xff08;即非关系型数据库&#xff09;&#xff0c;依托Hadoop分布式文件系统HDFS提供分布式数据存储&#xff0c;利用MapReduce来处理海量数据&#xff0c;用Zookeeper作为其分布式协同服务&#xff0c;一…

逆波兰计算器的完整代码

前置知识&#xff1a; 将中缀表达式转为List方法&#xff1a; //将一个中缀表达式转成中缀表达式的List//即&#xff1a;(3042)*5-6 》[(, 30, , 42, ), *, 5, -, 6]public static List<String> toIndixExpressionList(String s) {//定义一个List&#xff0c;存放中缀表达…