大家好,我是微学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.原型/建造者/抽象工厂:当构建具有很多参数和配置选项,并且存在各种各样组合方式且相互依赖性高时候非常有用。比如,在构建复杂神经网络结构时候(比如具有很多隐藏层数量、各种类型激活函数、正则化技术以及其他超参数设置)非常方便。
以上是想到的几种场景,还不能涵盖所有场景。实际上, 如何将设计原则运用到神经网络编程中取决于具体项目需求和团队偏好。