设计模式大白话

参考资料——大话设计模式,csdn,简书;
—————原则的大白话——————
三个原则:单一原则 开闭原则 依赖倒转
解释:单一原则——类实现的功能单一;
开闭原则——对增加开放(可扩展),读修改关闭(模块性)
依赖倒转——(名言2句)①上层不依赖下层,二者依赖抽象;
②抽象不依赖细节,细节依赖抽象。
这两句话值得单独说,结合当前项目的理解:
①执行器总类与各种具体的实现类时不相互依赖的(可复用性高);但是二者都是对于执行动作的抽象;
②(今天与二老板的谈话中有点感悟)对元素进行抽象时,可以刻意的忽略某一些细节,比如:对机器上的安全带模块信号进行抽象时,大可以按照其信号类型来分(走IO,走CAN),而不用关心信号的来源(执行器,车架,车轮)
当然,这样可能时扯远了,这里的细节更像是具体实现。
感觉某位博主贴的这段话比较不错:
一,抽象类的成员不应当持有具体类的指针或者引用
二,类应当继承于抽象类,而不是具体类;
三,基类中已经实现的方法不应当被覆盖;

——————模式的大白话————————————
简单工厂模式:
利用多态实现了高逼格版的if\switch,初步的分隔了上层逻辑与下层实现;初步实现了对象的抽象。
————————————
策略模式:类似上文,但是抽象的是某种算法,规则;
————————————
装饰模式:
动态扩展新的非公有的功能;
继承原有的抽象,按照需求添加新的抽象及其实现形式;(大家都穿工装,A在工装外面还想穿件红色的风衣,B在工装外想穿意见蓝色的风衣;这是创建“风衣类”,继承“工装类”。在“风衣类”中添加纯虚函数;再创建“红色风衣类”继承风衣类;这样,使用“红色风衣类”,既可以穿工装,又可以穿红色风衣)
————————闲着也是闲着————————
代理模式:
(不说定义,说说用途)①远程代理,安全代理,静态\动态代理。②在代理中添加新的工程。
看图说话,和装饰模式的区别:
设计模式大白话_第1张图片从图上来看,二和确有相似之处:具体实现,代理/装饰类同时继承于接口,且与具体实现有着相同的接口(亦可附加其他接口,扩充功能);
一个重大的不同是:装饰类可以被其具体实现再一次继承,最后实际调用的是 “装饰+本体”(亦即别人同时看到你穿风衣和工装)
————————以上2020.4.7——————
工厂方法模式:
先讲讲简单工厂模式【F工厂可以生产A,B,C,前提是需要向工厂中投入原料(选择实例化);增加新型产品时,工厂部分需要增新的生产线(增加工厂中的选择分支),这在无形中破坏了开闭原则】
工厂方法模式解决了这一问题——为每一种产品新建一个分工厂,这样完美切合开闭原则;(内心OS:这样切合开闭原则,但是使用时需要手动实例化,如果需要选择初始化,还是需要分支结构的)
————————————————
原型模式:
模式本身不想多说,更想关注C++深拷贝、浅拷贝本身;
设计模式大白话_第2张图片浅拷贝:对象操作中默认的拷贝构造、赋值函数,亦即位拷贝
具体表现在:可以拷贝对象中的变量;可以拷贝对象中的指针;不能拷贝指针所指向的内容;值得一提的是:类对象传入、传出函数都是调用默认拷贝构造
[图片来自下文博主;浅拷贝这段描述来自多方]

版权声明:本文为CSDN博主「木槿花better」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_41143631/article/details/81486817

——————以上4月8日————————————————
昨晚看“龙岭迷窟”,没写这一段,今天补上;
模板方法模式:
基于一个大的框架(模板),用子类实现其中不同的细节;用子类提供被调用函数;和装饰模式对比:
相同:外界调用子类的函数;子类是对模板(主体)的功能补充;
不同:模板方法模式中,子类不增加新的功能,只是对原有的细节进行不同的实现;装饰模式添加新的特有的功能;
——————————昨天花了很多时间做文档——————
外观模式:
像是一个集合。集合中有许多组件abcdf;组件abc形成方法1;cdf形成方法2;此时集合中提供方法1、方法2的接口。于是乎,客户端的调用显得比较简单(策略模式是有顺序的,这里是零件的简单无序集合)。
————————————————
建造者模式:
比较复杂。首先,定义了一些零部件(抽象函数),这些零件是可以替换的(多态);其次,用不同的顺序组合这些零部件,形成新的方法,通过不同的指挥者即可调用。(有些复杂的,因为灵活性更高了,有点像“简单工厂”+“策略模式”)
——————————以上4.10————————————
观察者模式:
(试想,总线上各个节点的CAN报文走一条CAN总线到达接收器,需要将报文发送到各个模块进行解析。实际操作过程中,CAN报文头有识别ID,每个节点只有接收到对应ID的报文才会解析;所以可以大胆的将报文发送到各个节点【或者理解为调用各个节点的报文解析函数解析送来的报文】)
可以使用回调函数完成这一过程;当然可以使用观察者模式如下的C++实现方式。(observer抽象,subject抽象有耦合,但是二者具体的实现无耦合)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/i_chaoren/article/details/80561204
————————————————
版权声明:本文为CSDN博主「i_chaoren」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/i_chaoren/article/details/80561204

———————————昨天老板爱上我———————
抽象工厂模式:
这位博主用产品族来类比抽象工厂,和我的理解比较相近,录之,不赘述。
一言以蔽之,抽象工厂为某一族产品提供接口;这一族产品又为旗下的具体产品提供接口。于是乎,抽象工厂完成了更大规模的抽象,更加灵活。

https://blog.csdn.net/swqqcs/article/details/39138547

【附注】反射,依赖注入等c++本身无支持机制,暂时不加使用。
————————————
状态模式:策略模式的具体实现之一:将判断的逻辑与对应实现封装成类;下面这个博主的例子已经非常的直白了(说明:context,用于维护当前的状态以及状态切换)。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/fanyun_01/article/details/51791086
————————————————
版权声明:本文为CSDN博主「老樊Lu码」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/fanyun_01/article/details/51791086

————————————————————
适配器模式:
新瓶装旧酒;用原有的模式提供新的接口
备忘录模式:
内容备份;
————————————————
组合模式:
(理解的不是很深刻)上下文之间有一定逻辑结构,但是功能却相同。
实现——(有点类似数据结构“树”的创建)在“根”上定义所有需要的功能,之后节点与叶可以从根中自由扩展,对功能进行不同实现。(不懂自己在说啥)
————————————————————————
迭代器模式:
没啥可说。参考C++中的迭代器使用;
———————————————————————
单例模式:
比较常用,保证某一个类再一个工程中只实例化一次。需要注意的知识点:①双重锁
————————————————————————
桥接模式:
某一个系统由多个部分组成,而各个部分之间没有没有十分强的“is-a”关系。此时,可以将各个部分的实现分开,在一个部分中传入另一个部分的指针,通过指针调用其实现,完成各部分之间的“聚合”
对比:组合模式是系统由部分A,B组成。二者又都是由组件a,b,c组成;整体的实现就是不见abc的组合。
————————————————————————
命令模式:
将发布者,命令接收,命令的执行分割开来。
优点①容易形成一个命令队列 ②方便命令接入日志 ③命令的接收有较大可操作性:可以拒绝,撤销,重做命令。[每台理解命令模式]
—————————————————————————
职责链模式:
这一模式单独有一片博文;
————————————2020.4.17—————————
中介者模式:
多个类相互交织调用,利用中介者模式居中协调,减少类之间的耦合;
——————————————————————————
享元模式,解释器模式:
并没太懂啥意思,知识感觉在普通工程中应该是用不上的
——————————————————————————
访问者模式:
双分派技术是一个标志;某一个结果的出现是由多个状态影响的;
——————————————————————————
结语:舒服的日子过去了。纸上得来终觉浅,绝知此事要躬行;下一个阶段学习别人的工程思想、做法。
2020.4.18

你可能感兴趣的:(设计模式)