【25届秋招备战C++】23种设计模式

【25届秋招备战C++】23种设计模式

  • 一、简介
    • 程序员的两种思维
    • 8大设计原则
  • 二、具体23种设计模式
    • 2.1 创建型模式
    • 2.2 结构性模式
    • 2.3 行为型模式
  • 三、常考模式的实现
  • 四、参考

一、简介

从面向对象谈起,

程序员的两种思维

  • 底层思维:向下
    封装:隐藏内部实现
    多态:复用现有代码
    继承:改写对象行为
  • 抽象思维:向上

如何解决复杂性:分解或抽象。
软件设计的金科玉律:复用。

8大设计原则

  • 依赖倒置原则(DIP)
  • 开闭原则(ocp)
  • 单一职责原则(SRP)
  • Liskov替换原则(LSP)
  • 接口隔离原则(ISP)
  • 优先使用组合而非继承
  • 封装变化点
  • 针对接口编程而非针对实现编程

面向接口设计:接口标准化。

二、具体23种设计模式

2.1 创建型模式

1、工厂方法(factory method)模式:
定义一个创建对象的接口,但由子类决定需要实例化哪个类。工厂方法使得子类实例化的过程推迟。
2、抽象工厂(abstract factory)模式:
提供一个接口,可以创建一- 系列相关或相互依赖的对象,而无需指定他们具体的类。
3、原型(prototype)模式: .
用原型实例指定创建对象的类型,并且通过拷贝这个原型来创建新的对象。
4、单例(singleton)模式:
保证一个类只有一个实例,并提供一个访问它的全局访问点
5、构建器(builder)模式:
将一个复杂类的表示与其构造相分离,使得相同的构建过程能够得出不同的表示。

2.2 结构性模式

1、适配器(adapter)模式:
将一个类的接口转换成用户希望得到的另一个接口。 它使原本不相容的接口得以协同工作。
2、桥接(bridge)模式:
将类的抽象部分和它的实现部分分离开来,使它们可以独立地变化。
3、组合(composite)模式:
将对象组合成树型结构以表示“整体部分”的层次结构,使得用户对单个对象和组合对象的使用具有一致性。
4、装饰(decorator) 模式:
动态地给一个对象添加一-些额外的职责。它提供了用子类扩展功能的一个灵活的替代,比派生一个子类更加灵活。
5、外观(facade)模式:
定义一个高层接口,为子系统中的- -组接口提供一一个-致的外观,从而简化了该子系统的使用。
6、享元(flyweight)模式:
提供支持大量细粒度对象共享的有效方法。
7、代理(proxy)模式:
为其他对象提供一种代理以控制这个对象的访问。

2.3 行为型模式

1、职责链(chain of responsibility)模式:
通过给多个对象处理请求的机会,减少请求的发送者与接收者之间的耦合。将接收对象链接起来,在链中传递请求,直到有一个对象处理这个请求。速记关键字:传递职责
2、命令(command)模式:
将一个请求封装为-个对象,从而可用不同的请求对客户进行参数化,将请求排队或记录请求日志,支持可撤销的操作。速记关键字: 日志记录,可撤销
3、解释器(interpreter)模式:
给定一种语言,定义它的文法表示,并定义一个解释器,该解释器用来根据文法表示来解释语言中的句子。
4、迭代器(iterator)模式:
提供-一种方法来顺序访问一个聚合对象中的各个元素而不需要暴露该对象的内部表示。
5、中介者(mediator)模式:
用一个中介对象来封装一系列的对象交互。它使各对象不需要显式地相互调用,从而达到低耦合,还可以独立地改变对象间的交互。
6、备忘录(memento)模式:
在不破坏封装性的前提下,捕获一个对 象的内部状态,并在该对象之外保存这个状态,从而可用在以后将该对象恢复到原先保存的状态。
7、观察者(observer)模式:
定义对象间的一种一对多的依赖关系, 当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动更新。
8、状态(state)模式:
允许-一个对象在其内部状态改变时改变它的行为。
9、策略(strategy)模式:
定义一系列算法,把它们一一个个封装起来,并且使它们之间可互相替换,从而让算法可以独立于使用它的用户而变化。
10、模板方法(template method)模式:
定义一个操作中的算法骨架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构即可重新定义算法的某些特定步骤。
11、访问者(visitor)模式:
表示一个作用于某对象结构中的各元素的操作,使得在不改变各元素的类的前提下定义作用于这些元素的新操作。

三、常考模式的实现

  1. 单例

  2. 装饰器
    在这里插入图片描述

  3. 工厂模式
    在这里插入图片描述

  4. 观察者模式
    在这里插入图片描述

  5. 策略模式
    在这里插入图片描述

  6. 代理模式
    在这里插入图片描述

四、参考

B站视频
笔记
代码

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ASP.NET小型证券术语解释及翻译系统的设计与开发

摘 要 在系统设计上,综合各种翻译类型网站优缺点,设计出具有任何使用者都可添加术语信息的且只有管理员能够实现术语修改及删除等独特方式的术语查看管理系统。此方式能够使术语量快速增大,并且便于使用者及管理员操作,满足相互…

软件设计师-应用技术-面向对象程序设计题5

考题形式: 代码填空,5 - 6空,每空3分。 基础知识及技巧: 1. 类的定义: 2. 接口的定义: 给实现类具体代码,填写接口中方法。 3. 类、抽象类、继承类、抽象方法的定义: 抽象类&…

【管理咨询宝藏95】SRM采购平台建设内部培训方案

本报告首发于公号“管理咨询宝藏”,如需阅读完整版报告内容,请查阅公号“管理咨询宝藏”。 【管理咨询宝藏95】SRM采购平台建设内部培训方案 【格式】PDF版本 【关键词】SRM采购、制造型企业转型、数字化转型 【核心观点】 - 重点是建设一个适应战略采…

20240508请问GTX2080TI的300和300A核心的差异?

20240508请问GTX2080TI的300和300A核心的差异? 在拼多多/淘宝上,GTX2080TI的300A核心的会比300核心的贵100¥左右。 但是怎么区分呢? 300a核心和300请问怎么区分呢?[嘻嘻] devicr ID diviceid 1e07是300a 1e04是300 Gp…

2024041702-计算机操作系统 - 死锁

计算机操作系统 - 死锁 计算机操作系统 - 死锁 必要条件处理方法鸵鸟策略死锁检测与死锁恢复 1. 每种类型一个资源的死锁检测2. 每种类型多个资源的死锁检测3. 死锁恢复 死锁预防 1. 破坏互斥条件2. 破坏占有和等待条件3. 破坏不可抢占条件4. 破坏环路等待 死锁避免 1. 安全状态…

使用 Parallels Desktop 在 Mac 上畅玩 PC 游戏

我们不再需要接受 “Mac 不是为游戏而打造” 这一事实;Parallels Desktop 通过将电脑变成高性能的游戏设备,从而改变了一切。 Parallels Desktop 充分利用 Mac 硬件的强大功能,让您无缝畅玩 Windows 专享游戏。 性能得到提升,可玩…

基于 llama2 的提示词工程案例2

优化大型语言模型(LLMs) 优化大型语言模型(LLMs)中的提示词(prompts)是提高模型性能和输出相关性的重要手段。以下是一些优化提示词的方向: 明确性:确保提示词清晰明确,…

数据湖与数据网格:引领组织数据策略的未来

十多年来,组织已经采用数据湖来克服数据仓库的技术限制,并发展成为更加以数据为中心的实体。虽然许多组织已经使用数据湖来探索新的数据用例并改进其数据驱动的方法,但其他组织发现所承诺的好处很难实现。因此,许多数据湖计划的有…

SOLIDWORKS Electrical电气元件智能开孔

实际的电气元器件安装中,一些元器件需要穿过孔洞安装,例如按钮、指示灯会在配电柜的控制面板上,需要穿过控制面板安装。这部分内容放在软件建模、装配时,往往比较复杂因为考虑孔的大小符合元器件规格、孔跟随元器件移动、同一元器…

CR80清洁卡的重要性

在我们日常生活中,身份证、银行卡、信用卡等塑料卡片已经成为了不可或缺的一部分。这些卡片通常符合CR80标准,这意味着它们的尺寸和厚度符合国际标准,为了保证这些卡片的读取和使用效果,清洁维护显得尤为重要。 什么是CR80卡&…

Linux学习之禁用防火墙

查看防火墙状态 systemctl status firewalld.service 第一行前面的圆圈是有颜色的就是开启状态 黑色的就是关闭状态 关闭防火墙 systemctl stop firewalld.service 输入密码认证 再次查看防火墙状态 systemctl status firewalld.service 第一行前面的圆圈变成黑色说明关闭…

杰理-701-单线灯-ws2812-驱动

杰理-701-单线灯-ws2812-驱动 LED_gradual_open(); //调用后 呼吸灯 set_led_colour(R,G,B);//具体颜色 spi_dma_set_addr_for_isr //spi 配置dma 后灯才亮 #define LED_H 0x7c #define LED_L 0x40 发送高位和地位的字节,具体…

UP互助 帮助UP起号做视频 支持B站和抖音

【软件名字】:UP互助 【软件版本】:1.0 【软件大小】:17.5MB 【软件平台】:安卓 【测试机型】:小米9 1.随便登个邮箱,添加自己平台的频道,然后就可以帮助别人,添加频道后在添加…

仓库管理系统需求调研要点

仓库管理系统需求调研 一、仓库的作用 仓库分类 原材料仓库:用于存放生产所需的原材料和零部件,需要保持原材料的质量和数量稳定。半成品仓库:存放生产过程中的半成品和在制品,需要保持良好的生产流程和及时出库。成品仓库&#x…

【Arduino IDE 2】Windows平台安装ESP8266 NodeMCU LittleFS Uploader(文件上传插件)

在Arduino IDE 2(2.2.1或更高版本)上,如何安装基于ESP8266 NodeMCU的LittleFS文件系统上传插件,以及如何将文件上传到ESP8266 NodeMCU板文件系统。 一、LittleFS简介 LittleFS是一个为微控制器创建的轻量级文件系统,可…

智慧校园能解决什么问题?

智慧校园是学校信息化建设的基础载体,他将校园工作的各个业务模块融合,形成一个有机的整体。同时智慧校园又一种先进的教育管理模式,它利用信息技术如物联网、大数据、云计算、人工智能等,来提升教育质量和管理效率。 同时&#…

RabbitMQ(Docker 单机部署)

序言 本文给大家介绍如何使用 Docker 单机部署 RabbitMQ 并与 SpringBoot 整合使用。 一、部署流程 拉取镜像 docker pull rabbitmq:3-management镜像拉取成功之后使用下面命令启动 rabbitmq 容器 docker run \# 指定用户名-e RABBITMQ_DEFAULT_USERusername \# 指定密码-e R…

Java_异常

介绍 编译时异常: 除RuntimeException和他的子类,其他都是编译时异常。编译阶段需要进行处理,作用在于提醒程序眼 运行时异常: RuntimeException本身和其所有子类,都是运行时异常。编译阶段不报错,是程序…

【Linux】gcc/g++的使用

🎉博主首页: 有趣的中国人 🎉专栏首页: Linux 🎉其它专栏: C初阶 | C进阶 | 初阶数据结构 小伙伴们大家好,本片文章将会讲解Linux中gcc/g使用的相关内容。 如果看到最后您觉得这篇文章写得不错…

登录校验总览-jwt令牌

一、前置问题 为什么要登录校验?登录校验,就是判断访问资源的用户是否是合法用户,保障安全。如果不设置登录校验,就可以跳过登录,直接通过url访问资源。二、登录校验实现思路: 在服务器端对请求进行统一拦…
最新文章