【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.hqwc.cn/news/679640.html

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

相关文章

FreeRTOS学习笔记-基于stm32(6)时间片调度实验

1、什么是时间片调度 在任务优先级相同的时候,CPU会轮流使用相同的时间去执行它,即时间片调度。这个相同的时间就是时间片。而时间片的大小就是SysTick的中断周期(SysTick的中断周期可以修改)。 比如有三个相同优先级的任务在运行…

【linux kernel】linux内核hid触摸源码hid-multitouch.c剖析

文章目录 一、内核中通用hid触摸驱动二、probe过程剖析(1)hid_parse()函数(2)hid_hw_start()函数(3)hid_connect()函数三、hid-multitouch.c应用场景一、内核中通用hid触摸驱动 在linux内核中,为HID触摸面板实现了一个通用的驱动程序,位于/drivers/hid/hid-multitouch.c文件…

在思科和华为上实现两个主机A,B A能ping通B,B不能ping通A

1.华为实验的topo如下 常规状态下任意两台主机都是可以ping通的 此时的需求是PC4能ping通PC2和PC3但是PC2和PC3不能ping通PC4 这里需要用到ACL策略 在接口上调用 验证: PC4能ping通PC2和PC3 PC2和PC3不能ping通PC4 2.思科类似 正常情况下是都能互相ping通 加上ac…

AI换脸原理(7)——人脸分割参考文献TernausNet: 源码解析

1、介绍 这篇论文相对来说比较简单,整体是通过使用预训练的权重来提高U-Net的性能,实现对UNet的改进。该方法也是DeepFaceLab官方使用的人脸分割方法。在介绍篇我们已经讲过了UNet的网络结构和设计,在进一步深入了解TernausNet之前,我们先简单回顾下UNet。 U-Net的主要结构…

STC8增强型单片机开发——C51版本Keil环境搭建

一、目标 了解C51版本Keil开发环境的概念和用途掌握C51版本Keil环境的安装和配置方法熟悉C51版本Keil开发环境的使用 二、准备工作 Windows 操作系统Keil C51 安装包(可以从Keil官网下载)一款8051单片机开发板 三、搭建流程 环境搭建的基本流程&#xf…

吴恩达2022机器学习专项课程C2(高级学习算法)W1(神经网络):2.5 更复杂的神经网络

目录 示例填写第三层的层数1.问题2.答案 公式:计算任意层的激活值激活函数 示例 层数有4层,不包括输入层。 填写第三层的层数 1.问题 你能把第二个神经元的上标和下标填写出来吗? 2.答案 根据公式g(wxb),这里的x对应的是上…

【C语言】内存函数的概念,使用及模拟实现

Tiny Spark get dazzling some day. 目录 1. memcpy-- 函数原型-- 函数使用-- 函数的模拟实现 2.memmove-- 函数原型-- 函数使用-- 函数的模拟实现 3. memset-- 函数原型-- 函数使用-- 函数的模拟实现 4. memcmp-- 函数原型-- 函数使用-- 函数的模拟实现 1. memcpy 使用需包含…

在国企分公司做信息宣传新闻投稿的经验分享

作为一名国企分公司的信息宣传工作者,我亲历了从传统投稿方式到数字化转型的全过程,这段经历既充满了挑战,也收获了成长。回首最初的日子,那些用邮箱投稿的时光,至今仍让我感慨万千。 初尝辛酸,邮箱投稿的艰难岁月 刚接手信息宣传工作时,我满腔热情,却很快被现实的冷水浇了个透…

场景文本检测识别学习 day08(无监督的Loss Function、代理任务、特征金字塔)

无监督的Loss Function(无监督的目标函数) 根据有无标签,可以将模型的学习方法分为:无监督、有监督两种。而自监督是无监督的一种无监督的目标函数可以分为以下几种: 生成式网络的做法,衡量模型的输出和固…

【仪酷LabVIEW AI工具包案例】使用LabVIEW AI工具包+YOLOv5结合Dobot机械臂实现智能垃圾分类

‍‍🏡博客主页: virobotics(仪酷智能):LabVIEW深度学习、人工智能博主 🎄所属专栏:『仪酷LabVIEW AI工具包案例』 📑上期文章:『【YOLOv9】实战二:手把手教你使用TensorRT实现YOLOv…

新版Idea配置仓库教程

这里模拟的是自己搭建的本地仓库环境,基于虚拟机搭建利用gogs创建的仓库 1、Git环境 你需要准备好git和仓库可以使用github 、gitee等 1.1 拉取代码 本项目使用 Git 进行版本控制,在 gogs 上创建一个个人使用的 git 仓库: http://192.168.…

【C++】详解STL容器之一的 vector

目录 概述 迭代器 数据结构 优点和缺点 接口介绍 begin end rbegin rend resize reseve insert erase 其他一些接口 模拟实现 框架 获取迭代器 深浅拷贝 赋值重载 reseve resize 拷贝构造 构造 析构 insert erase 其他 概述 vector是STL的容器之一。…