深度学习技巧应用29-软件设计模式与神经网络巧妙结合,如何快速记忆软件设计模式
大家好,我是微学AI,今天给大家介绍一下软件设计模式与神经网络巧妙结合,如何快速记忆软件设计模式。我们知道软件设计模式有23种,考试的时候经常会考到,但是这么种里面我们如何取判断它呢,如何去记忆它呢,今天就给大家介绍一下记忆方法,以及神经网络与他的结合内容。

目录
一、创建型模式包括:
1.工厂方法模式(Factory Method Pattern)
2.抽象工厂模式(Abstract Factory Pattern)
3.单例模式(Singleton Pattern)
4.生成器模式(Builder Pattern)
5.原型模式(Prototype Pattern)
二、结构型模式包括:
- 适配器模式(Adapter Pattern)
- 桥接模式(Bridge Pattern)
- 组合模式(Composite Pattern)
- 装饰器模式(Decorator Pattern)
- 外观模式(Facade Pattern)
- 享元模式(Flyweight Pattern)
- 代理模式(Proxy Pattern)
三、行为型模式包括:
- 职责链模式(Chain of Responsibility Pattern)
- 命令模式(Command Pattern)
- 解释器模式(Interpreter Pattern)
- 迭代器模式(Iterator Pattern)
- 中介者模式(Mediator Pattern)
- 备忘录模式(Memento Pattern)
- 观察者模式(Observer Pattern)
- 状态模式(State Pattern)
- 策略模式(Strategy Pattern)
- 模板方法模式(Template Method Pattern)
- 访问者模式(Visitor Pattern)
一、创建型模式:
1.工厂方法模式: 用于创建对象的模式,定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使得一个类的实例化延迟到其子类。
联想例子:想象一家图书店,根据不同的需求可以制作不同种类的书,而这些书的生产交由各自的工厂完成。
2.抽象工厂模式:为创建一组相关或相互依赖的对象提供一个接口,无需指定它们具体的类。抽象工厂模式通过多个工厂接口实现不同系列产品对象的创建,工厂接口都是抽象的,具体产品由具体的工厂实现。
联想例子:就像搭积木一样,每个积木都有自己的形状和颜色,而这些积木可以按照一定的规则组合成不同的模型。
3.单例模式:确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。
联想例子:就像一件稀世珍宝只有一件,而且只能从唯一的制造商那里购买。
4.生成器模式:将一个复杂对象的构建和表示分离,使得同样的构建过程可以创建不同的表示。生成器模式使用多个简单的对象构建成一个复杂的对象,而不需要知道每个简单对象的细节。
联想例子:建筑工人进行建造房子,一个工人负责砌墙,另一个负责安装门窗,最终完成的房子由多个部分组合而成。
5.原型模式:用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象。原型模式是通过克隆现有的对象来创建新对象,从而避免了重复创建大量相似的对象所带来的开销。
联想例子:像复印机一样,通过复制原件来生成相同的副本。
二、结构型模式
6 适配器模式:将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能够一起工作。
联想例子:适配器模式就像电源适配器,通过连接转换插口的方式让不同类型的电器工作在同一电网上。
7.桥接模式:将抽象部分与它的实现部分分离,使它们都可以独立地变化。
联想例子:桥接模式就像搭桥一样,通过一座桥梁将不同的实现地点连接起来,两个地点是独立的。
9.组合模式:将对象组合成树形结构以表示“部分-整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性。
联想例子:组合模式就像盒子,多个小盒子组成一个大盒子,在使用时无论是大盒子还是小盒子都可以被当做盒子使用。
10.装饰器模式:动态地给一个对象增加一些额外的职责,就增加对象功能而言,它比生成子类方式更为灵活。
联想例子:装饰器模式就像裹上厚厚的围巾、穿上手套等冬季保暖服饰,为原本的对象添加新的功能或属性。
11.外观模式:为子系统中的一组接口提供一个统一的入口,外观模式定义了一个高层接口,使得子系统更容易使用。
联想例子:外观模式就像城市的大门,将城市内所有的建筑、街道等隐藏在大门背后,对外只提供一个入口。
12.享元模式:运用共享技术有效地支持大量细粒度的对象。
联想例子:享元模式就像图书馆,大量的读者可以共享同一本图书,而不需要每个人都拥有一本。
13.代理模式:为其他对象提供一种代理以控制对这个对象的访问。
联想例子:代理模式就像保安,通过控制进出、观察行为等方式来保护被代理的对象。
三、行为型模式
14.职责链模式:避免请求发送者与多个请求处理者耦合在一起,将所有请求的处理者通过前一对象记住其下一个对象的引用而连成一条链,当有请求发生时,会从链头开始依次遍历链上的每个对象,直到找到能够处理该请求的对象为止。
联想例子:职责链模式就像快递包裹的传递,从寄件人到收件人,每个人都有自己的职责和任务。
15.命令模式:将“请求”封装成对象,以便使用不同的请求、队列或日志来参数化其它对象。
联想例子:命令模式就像遥控器,在遥控器上对应不同的按钮,按下按钮就会触发相应的命令。
16.解释器模式:给定一个语言,定义它的文法的一种表示,并定义一个解释器,使用该解释器来解释语言中的句子。
联想例子:解释器模式就像翻译,将一种语言的信息转换成另一种语言或符号。
17.迭代器模式:提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。
联想例子:迭代器模式就像读者逐个阅读一本书的章节和段落,不需要了解书本的具体内容结构。
18.中介者模式:用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显示地互相作用,从而使其耦合松散,可以独立地改变它们之间的交互。
联想例子:中介者模式就像电视机上的遥控器,遥控器作为电视机与用户之间的一个中介,通过遥控器可以实现用户对电视机的控制。
19.备忘录模式:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便之后将对象恢复到原先保存的状态。
联想例子:备忘录模式就像拍照,将自己或者他人拍下来的瞬间记录下来,之后可以根据照片回忆当时的情景。
20.观察者模式:定义了对象之间的一对多依赖关系,以便一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。
联想例子:观察者模式就像猎人跟踪猎物的过程,当猎物在某个位置活动时,猎人也会随之移动。
21.状态模式:当一个对象的内部状态改变时允许改变其行为,这个对象看起来像是改变了其类。
联想例子:状态模式就像交通信号灯,当灯变成绿色时,人和车可以通行,当灯变成红色时,人和车需要停止,每个状态对应着不同的行为。
22.策略模式:定义一系列算法,将每个算法都封装起来,并且使它们之间可以互换。
联想例子:假设你正在使用一个GPS设备或应用程序来找到从点A到点B的路线。大多数GPS软件都会提供至少两种不同类型的路由策略: 最快路线:这个策略会选择预计驾驶时间最短的路线,追不堵的路线,即使这意味着你需要经过更远的距离。 最短距离:此策略会选择总里程数最少的路线,即使该路上有较多红绿灯。
23.模板方法模式:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。联想例子:模板方法模式就像做蛋糕,有一个标准的蛋糕制作方法,但是根据不同的口味、材料和烘焙时间可以制作出各种不同的蛋糕。
24.访问者模式:封装一些施加于某种数据结构元素之上的操作,它可以在不改变这个元素的前提下定义作用于这些元素的新操作。
联想例子:访问者模式就像旅游导游,导游会带领游客参观不同的景点,而游客之间可以自由选择是否要参加某个景点的旅游。
四、软件设计模式与神经网络
设计模式是面向对象设计中用于解决常见问题的一种方法。虽然神经网络通常使用更为函数式的编程范式,但仍然可以应用某些设计模式来帮助组织和管理代码。以下是一些可能的应用:
1.工厂模式:这个模型可以在创建神经网络层或整个网络时使用。例如,你可能有一个函数,它接受配置参数(如层数、每层的节点数等),并返回一个已配置好的神经网络。
2.单例模式:如果你在程序中只需要一个特定类型的神经网络(例如预训练的BERT或GPT-2),则可以使用此模式确保只创建一次并在需要时重复使用它。
3.装饰器模式:这个设计模式可以被用于添加新功能到现有对象而不改变其结构。在深度学习中,我们可能会将装饰器应用于不同的神经网络层上以实现特殊功能,比如正则化、dropout等。
4.策略模式:策略模型可用于选择不同类型的优化算法(如Adam、SGD等)。这样做允许我们动态地改变优化器行为。
5.观察者模型:当训练过程中发生某些事件(例如每个epoch结束或验证损失停止下降)时,此类设计可触发某些操作。例如,TensorBoard就利用了观察者模型来监视训练过程并生成有关准确性和损失等指标随时间变化情况图表。
6.原型/建造者/抽象工厂:当构建具有很多参数和配置选项,并且存在各种各样组合方式且相互依赖性高时候非常有用。比如,在构建复杂神经网络结构时候(比如具有很多隐藏层数量、各种类型激活函数、正则化技术以及其他超参数设置)非常方便。
以上是想到的几种场景,还不能涵盖所有场景。实际上, 如何将设计原则运用到神经网络编程中取决于具体项目需求和团队偏好。
相关文章:
深度学习技巧应用29-软件设计模式与神经网络巧妙结合,如何快速记忆软件设计模式
大家好,我是微学AI,今天给大家介绍一下软件设计模式与神经网络巧妙结合,如何快速记忆软件设计模式。我们知道软件设计模式有23种,考试的时候经常会考到,但是这么种里面我们如何取判断它呢,如何去记忆它呢&a…...
中文编程开发语言工具应用案例:ps5体验馆计时收费管理系统软件
中文编程开发语言工具应用案例:ps5体验馆计时收费管理系统软件 软件部分功能: 1、计时计费功能:只需点开始计时即可,时间直观显示 2、商品管理功能:可以管理饮料等商品 3、会员管理功能:支持只用手机号作…...
绘制核密度估计图
简介 核密度估计图(Kernel Density Estimation,KDE)是一种用于估计数据分布的非参数方法,通常用于可视化和理解数据的分布情况。它通过平滑地估计数据的概率密度函数(PDF)来显示数据的分布特征,…...
基于深度学习网络的蔬菜水果种类识别算法matlab仿真
目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1数据集准备 4.2构建深度学习模型 4.3模型训练 4.4模型评估 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 clc; clear; close all; wa…...
UE4 距离场
在项目设置的渲染模块可打开距离场 把该节点连上,该节点的意思是,距离表面越近,材质显示值为0 不接近表面时: 接近表面时 可勾选该值即可看到距离场具体效果: 未接触表面时: 接触表面时: 产生…...
【SA8295P 源码分析 (四)】26 - QNX Ethernet MAC 驱动 之 emac_rx_thread_handler 数据接收线程 源码分析
【SA8295P 源码分析】26 - QNX Ethernet MAC 驱动 之 emac_rx_thread_handler 数据接收线程 源码分析 一、emac_rx_thread_handler():通过POLL 轮询方式获取数据二、emac_rx_poll_mq():调用 pdata->clean_rx() 来处理消息三、emac_configure_rx_fun_ptr():配置 pdata->…...
VR全景广告:让消费者体验沉浸式交互,让营销更有趣
好的产品都是需要广告宣传的,随着科技的不断发展,市面上的广告也和多年前的传统广告不同,通过VR技术,可以让广告的观赏性以及科技感更加强烈,并且相比于视频广告,成本也更低。 在广告营销中,关键…...
论文阅读 | RAFT: Recurrent All-Pairs Field Transforms for Optical Flow
RAFT: Recurrent All-Pairs Field Transforms for Optical Flow ECCV2020光流任务best paper 论文地址:【here】 代码地址:【here】 介绍 光流是对两张相邻图像中的逐像素运动的一种估计。目前碰到的一些困难包括:物体的快速运动ÿ…...
神经网络的发展历史
神经网络的发展历史可以追溯到上世纪的数学理论和生物学研究。以下是神经网络发展史的详细概述: 早期的神经元模型: 1943年,Warren McCulloch和Walter Pitts提出了一种神经元模型,被称为MCP神经元模型,它模拟了生物神经…...
【单元测试】--单元测试最佳实践
一、单元测试代码风格 编写单元测试代码时,遵循一致的风格和最佳实践是非常重要的,因为它有助于提高代码的可读性、可维护性和可靠性。以下是一些常见的单元测试代码风格和最佳实践: 命名约定: 测试方法的名称应当清晰、描述性&…...
llava1.5-部署
llava1.5 ——demo部署 下载代码和权重 新建weights文件夹,并下载到LLaVA/weights/中。->需要修改文件名为llava-版本,例如llava-v1.5-7b. 运行 启动控制台 python -m llava.serve.controller --host 0.0.0.0 --port 4006启动gradio python -m…...
倒计时 1 天|KCD 2023 杭州站
距离「KCD 2023 杭州站」开始只有 1 天啦 大家快点预约到现场哦~ KCD 2023 活动介绍 HANGZHOU 关于 KCD Kubernetes Community Days(KCD)由云原生计算基金会(CNCF)发起,由全球各国当地的 CNCF 大使、CNCF 员…...
什么是模拟芯片,模拟芯片都有哪些测试指标?
模拟芯片又称处理模拟信号的集成电路 模拟集成电路主要是指由电容、电阻、晶体管等组成的模拟电路集成在一起用来处理模拟信号的集成电路。有许多的模拟集成电路,如运算放大器、模拟乘法器、锁相环、电源管理芯片等。 模拟集成电路的主要构成电路有:放…...
C++-json(2)-unsigned char-unsigned char*-memcpy-strcpy-sizeof-strlen
1.类型转换: //1.赋值一个不知道长度的字符串unsigned char s[] "kobe8llJfFwFSPiy"; //1.用一个字符串初始化变量 unsigned int s_length strlen((char*)s); //2.获取字符串长度//2.字符串里有双引号"" 需要…...
python安装第三方包
1 命令行下载 pip install 包名称 进入命令行输入该命令 由于pip是连接的国外的网站进行包的下载,所以有的时候会速度很慢。 我们可以通过如下命令,让其连接国内的网站进行包的安装: pip install -i https://pypi.tuna.tsinghua.edu.cn/s…...
《数据结构、算法与应用C++语言描述》-队列的应用-电路布线问题
《数据结构、算法与应用C语言描述》-队列的应用-电路布线问题 问题描述 在 迷宫老鼠问题中,可以寻找从迷宫入口到迷宫出口的一条最短路径。这种在网格中寻找最短路径的算法有许多应用。例如,在电路布线问题的求解中,一个常用的方法就是在布…...
GC overhead limit exceeded问题
1.问题现象 程序包运行时候发生了java.lang.OutOfMemoryError: GC overhead limit exceeded异常, 详细信息如下 org.apache.ibatis.exceptions.PersistenceException: ### Error querying database. Cause: org.jboss.util.NestedSQLException: Error; - nested t…...
What‘s new in Arana v0.2.0
Arana 定位于云原生数据库代理,它可以以 sidecar 模式部署为数据库服务网格,项目地址是 https://github.com/arana-db/arana 。Arana 提供透明的数据访问能力,当用户在使用时,可以不用关心数据库的 “分片” 细节,像使…...
STM32 串口接收中断被莫名关闭
使用cubeidestm32f4进行调试,发现UART4串口会被莫名的关掉,导致不能接收数据,经过排查如下: HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout) {uint8_t *pd…...
接口测试vs功能测试
接口测试和功能测试的区别: 本文主要分为两个部分: 第一部分:主要从问题出发,引入接口测试的相关内容并与前端测试进行简单对比,总结两者之前的区别与联系。但该部分只交代了怎么做和如何做?并没有解释为什…...
铭豹扩展坞 USB转网口 突然无法识别解决方法
当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...
MPNet:旋转机械轻量化故障诊断模型详解python代码复现
目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...
centos 7 部署awstats 网站访问检测
一、基础环境准备(两种安装方式都要做) bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats࿰…...
MVC 数据库
MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...
剑指offer20_链表中环的入口节点
链表中环的入口节点 给定一个链表,若其中包含环,则输出环的入口节点。 若其中不包含环,则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...
论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)
笔记整理:刘治强,浙江大学硕士生,研究方向为知识图谱表示学习,大语言模型 论文链接:http://arxiv.org/abs/2407.16127 发表会议:ISWC 2024 1. 动机 传统的知识图谱补全(KGC)模型通过…...
CMake 从 GitHub 下载第三方库并使用
有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...
Java线上CPU飙高问题排查全指南
一、引言 在Java应用的线上运行环境中,CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时,通常会导致应用响应缓慢,甚至服务不可用,严重影响用户体验和业务运行。因此,掌握一套科学有效的CPU飙高问题排查方法&…...
10-Oracle 23 ai Vector Search 概述和参数
一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI,使用客户端或是内部自己搭建集成大模型的终端,加速与大型语言模型(LLM)的结合,同时使用检索增强生成(Retrieval Augmented Generation &#…...
JAVA后端开发——多租户
数据隔离是多租户系统中的核心概念,确保一个租户(在这个系统中可能是一个公司或一个独立的客户)的数据对其他租户是不可见的。在 RuoYi 框架(您当前项目所使用的基础框架)中,这通常是通过在数据表中增加一个…...
