23种设计模式总结

2023-11-13

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

23种设计模式总结


设计模式是一套被反复使用,多数人只晓得,经过分类编目的的,代码设计经验的总结。

1:简单工厂模式:建立一个工厂类,对同一接口下的类进行实例化的创建,也就是在工厂类中返回相应的返回值来达到对同意接口下的不同类的调用。

2:抽象工厂模式:即在简单工厂类的基础上,增加了工厂类和接口的数量,即如果要创建新的实例,只需要实现工厂类对应的的接口和和实现类的接口即可,这样极大的提高了程序的拓展性。

3:单例模式:顾名思义在单例模式种只存在一个实例,实力的创建也只进行了一次,具体利用将构造方法私有化的方式,防止多次的实例化的创建,这种模式不仅内存占用少,核心控制也能达到单一化。

4:建造者模式:建造者模式的特点在于,它将多个属性集成在一个类中,实例化的创建不再是单个产品,而是创建对象的多个部分,利用建造者模式实现实例化的创建可以产生一个多属性的复杂对象。

5:原型模式:顾名思义,利用原有的对象,进行复制,克隆,产生一个与原对象相似的新对象,具体操作在于,定义一个接口在实现类中覆写实现类中的复制,克隆方法,实现复制或者克隆。

6:适配器模式:适配器模式在于实现程序接口和用户接口的转换,程序接口不一定满足了用户的需求,此时利用适配器模式将程序接口转换为用户想用的接口来达到用户需求。从类的角度看,只需要创建一个新类继承原来的类实现新的接口即可。

7:装饰模式:顾名思义,即为原有的对象添加新的功能,要求装饰对象和被装饰对象实现同一个接口,装饰对象持有被装饰对象的实例。

8:代理模式:代理模式就像名称所说的一样,多创建一个代理类,实现原有类中地方法,同时对实现过程加以控制。

9:外观模式:外观模式通常为了降低类与类之间的耦合度,将具有相同实例的多个类,在另一个类中定义关系,实现了解耦的作用。

10:桥接模式:桥接模式具体是抽象化接口和实现类的分离,主要也是为了程序中各组分间的低耦合度。

11:组合模式:用于表示部分和整体之间的模式。

12:享元模式:像名称所说的一个,是对多个对象的共享,也就是生成一个共享池类,对某一次的的操作属性进行集成,在执行这一次操作时对共享池进行对象调用。这样做的目的极大的减小了内存的开销,和实例的数量(减少了代码量)。

13:策略模式:将不同的算法进行封装,再由用户本事决定算法的使用,也就是在用户接口中由用户来做选择具体调用哪一种算法。

14:模板方法模式:本意是通过对抽象父类的调用实现对子类的调用,具体操作:一个抽象类中,有一个主方法,再定义多个方法,可以是抽象的,也可以是实际的方法,定义一个类,继承该抽象类,重写抽象方法,通过对抽象类的调用实现对子类的调用。

15:观察者模式:是类与类之间的关系不涉及类的继承,主要体现在对特定对象的监控,当对象发生变化时,会对需要告知的对象进行通知。

16:迭代器模式:顾名思义,迭代器模式是对集合的对象进行聚集,也就是遍历集合中的对象,然后在另一个类中进行方法的调用,因此迭代器模式的两个要点,一是对对象的遍历,二是迭代器对象,用于其他类对遍历操作的调用。

17:职责链模式:是多个对象之间的调用,一个对象拥有下一个对象的引用时,会产生一种链状关系,请求会逐个向上传递,直到被处理。

18:命令模式:是调用者对被调用者进行命令要求这一过程的解耦,也就是说,调用者,命令(请求),被调用者之间,不必在乎其他组分怎样工作,只要做好自己的部分即可。也就是为命令添加接口,修改命令不会影响调用者和被调用者。

19:备忘录模式:是为原有的类添加一个备忘录类,和存储备忘录的类,存储备忘的类不能修改,而备忘录累的目的在于存储原有类中地对象的某一状态,在需要的时候进行恢复。

20:状态模式:就是在对象的状态改变时,同时改变其行为,往往对象的不同状态都对应着不同的行为。

21:访问者模式:访问者模式就是一种分离对象数据结构与行为的方法,通过这种分离,可达到为一个被访问者动态添加新的操作而无需做其它的修改的效果。

22:中介者模式:顾名思义,为原有的类提供一个中介类,这样的好处也是为了降低耦合度,提高程序拓展性。

23:解释器模式:解释器模式是为不同的算法实现提供了一个统一的接口。
在这里插入图片描述

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

23种设计模式总结 的相关文章

随机推荐

  • Rancher 集群安装

    一 Rancher 是什么 Rancher 是一个 Kubernetes 管理工具 用于在任何地方和任何提供商上部署和运行集群 Rancher 可以从托管提供商调配 Kubernetes 调配计算节点 然后将 Kubernetes 安装到这
  • TCP应用层协议

    TCP IP是个协议组 可分为三个层次 网络层 传输层和应用层 在网络层有IP协议 ICMP协议 ARP协议 RARP协议和BOOTP协议 在传输层中有TCP协议与UDP协议 在应用层有FTP HTTP TELNET SMTP DNS等协议
  • 准备刺第一针了(飞秋官方下载)

    WZSZF飞鸽 2013年10月26日 它还有一双花椒粒一样大小的眼睛 它还会丰富多腔地叫唤 叫起来婉转动听 毛大爹 原来我们不能离开眼镜啊 第二天 呜的一声 简直不相信自己的耳朵 放生青蛙今天外公外婆叔叔阿姨们要来我家吃饭 我终于撑到最后
  • Z-Statk协调器 路由器 终端的确定---Simple例程(一)

    Z Statk协调器 路由器 终端的确定 Simple例程 一 2010 12 24 09 42 10 分类 嵌入式 当我们选择了终端 路由器 或者协调器的时候 来看一下程序中是怎么判断的 也就是如何作为其中的各个角色进行启动 是加入网络
  • 使用内网负载机(Linux)执行Jmeter性能测试

    一 背景 在我们工作中有时候会需要使用客户提供的内网负载机进行性能测试 一般在什么情况下我们需要要求客户提供内网负载机进行性能测试呢 遇到公网环境下性能测试达到了带宽瓶颈 那么这时 我们就需要考虑在内网环境负载机下来执行我们的性能测试以达到
  • 给button设置背景图片不显示解决了

    以前给按钮设置背景图片但是图片不显示 一直没有解决 网上也找不到正确的方法 今天终于被我解决了 其实就把button的背景颜色改改就OK了
  • 面试时这样介绍算法,想不高薪都难,排序算法(归并排序)

    算法背景 归并排序 Merge sort 是一种排序算法 它的目的是将一个无序的数组变成有序的 它采用分治法 将原数组不断地分成若干个小数组 直到每个小数组只有一个元素 然后把这些小数组按照顺序合并起来 最终得到一个有序的数组 归并排序需要
  • CSS3滤镜——页面黑白灰度处理

    每当遭遇重大灾难 比如之前的非典 汶川地震 以及前几天清明节对新冠肺炎逝世同胞的哀悼 各大主流网站也会呈黑白两色 今天偶然搜了下实现机制 原来是如此的简单 也对之前不怎么了解的滤镜刮目相看了 将以下样式代码放到页面中即可实现页面黑白处理 这
  • 数据结构和算法之插入排序

    一 插入排序 插入排序是一种简单直观的排序算法 它的原理是通过构建有序序列 对于未排序数据 在已排序序列中从后向前扫描 找到相应位置并插入 mermaid svg v2YbPqchr8qWCPvn font family trebuchet
  • FreeRTOS,串口中断接收中使用xQueueOverwriteFromISR()函数,程序卡死在configASSERT

    原因 UART的中断优先级设置的太高 高于了configMAX SYSCALL INTERRUPT PRIORITY宏定义的安全中断等级 UART的中断等级小于等于宏定义的优先等级即可
  • 学习新技术的10个建议

    学习新技术的10个建议 http www apkbus com portal php mod view aid 1780 我们生活在一个振奋人心的时代 我们可以越来越方便廉价地获得大量学习资源 这些资源的传播载体由最初的教室被变成了博客 技
  • “范式杯”2023牛客暑期多校训练营1

    D Chocolate 题意 有n m的矩阵 分成n m块 每一块都有一块巧克力 然后A和B两个人 进行博弈 选择一个下标 i j 将左上角 1 1 到 i j 的巧克力全部吃掉 如果谁是最后一个吃完全部巧克力 那么就输了 每人至少吃一块巧
  • 支付宝API接口开发相关文档以及实例

    支付宝实物即时到账接口 在下载该接口之前 请确定你已经签约了即时到账的服务协议 并且账号已经开通了即时到账的权限 口常见错误问题搜集 http union alipay com alipay zhichi shiwu 商家工具FAQ pdf
  • Python兼职:800-1500元/天,多做多得,时间自由!

    以下三种情况 哪个让你最绝望 好不容易找到一个资源齐全的网站 不是要收费就是要翻墙 每次想看的音乐会 想抢的假期车票 永远抢不到 工资4500 生活费1000 花呗欠了10000 说实话 反正我真的选不出 每一个都让我崩溃 但是我将这个测试
  • kibana创建索引_Elasticsearch 实战案例(索引切分、模板、别名、数据迁移)

    背景 基于ELK搭建的日志平台 前期匆忙建设过程中一些参数和设计未做过多的考虑 上线后就需要不断根据实际情况做调整 而一些调整限于ELK的一些特性 一旦操作不当就会出现丢数据 数据写入异常 数据查不到等情况 因此如何在这种背景下 做到对使用
  • 海康威视智能终端获取实时人脸体温识别记录二次开发java

    需求 使用的是海康威视人脸带体温识别智能终端 根据主动获取设备事件现在不支持获取体温 所以实时获取 参考设备布防 设备登陆注册省略 见 海康威视人脸识别智能终端获取设备事件二次开发Java 设备布防 Thread sleep 100000
  • Flutter 应用开发的pubspec.yaml文件说明

    pubspec yaml文件简介 作用 pubspec yaml是Flutter项目中的配置文件 它用于定义项目的依赖项 资源文件以及其他相关配置 示例 name audioplayers example description Demon
  • 进程和线程的区别

    转自文章进程和线程的区别 面试必考 进程和线程的区别 1 根本区别 进程和线程的根本区别是进程是操作系统 OS 资源分配的基本单位 而线程是处理器 CPU 任务调度和执行的基本单位 2 资源开销 每个进程都有独立的代码和数据空间 程序上下文
  • 【Nginx系列】- Nginx源码复杂安装

    目录 一 下载nginx源码 二 依赖环境准备 三 编译安装 四 加入系统服务 Nginx安装方式有多种 本篇介绍源码复杂安装 目的是进一步了解Nginx 一 下载nginx源码 官网下载最新稳定版 nginx download 二 依赖环
  • 23种设计模式总结

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 23种设计模式总结 设计模式是一套被反复使用 多数人只晓得 经过分类编目的的 代码设计经验的总结 1 简单工厂模式 建立一个工厂类 对同一接口下的类进行实例化的创建 也就是在