
设计模式
文章平均质量分 73
一只牛_007
这个作者很懒,什么都没留下…
展开
-
C++11 简化 “策略模式” 的一种思路
使用函数对象取代虚函数的一个理由是它去除了继承的限制,实现了松耦合,方法实现更加灵活,然而这个优点也可能成了它的缺点,当需要替代的虚函数增多时,组装function 的复杂度也在增加,太松散了导致代码不够直观,代码的内聚性也变低了原创 2023-01-10 10:52:17 · 341 阅读 · 0 评论 -
状态模式(c++实现)
状态模式模式定义状态模式(state),当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。模式动机状态模式主要解决的是当控制一个对象状态转换的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同状态的一系列类当中,可以把复杂的判断逻辑简化。 当一个对象的行为取决于它的状态,并且它必须在运行时根据状态改变它的行为时,就可以考虑使用状态模式了。UML类图源码实现state.h#include <string>class People;原创 2021-03-15 14:59:29 · 187 阅读 · 0 评论 -
命令模式(C++)
命令模式目录命令模式 模式定义 模式动机 UML类图 源码实现 优点 缺点 模式定义命令模式可以对发送者和接收者完全解耦,发送者与接收者之间没有直接引用关系,发送请求的对象只需要知道如何发送请求,而不必知道如何完成请求。将一个请求封装为一个对象,从而使我们可用不同的请求对客户进行参数化;对请求排队或者记录请求日志,以及支持可撤销的操作。模式动机敏捷开发的原则告诉我们,不要为代码添加基于猜测的、实际不需要的功能。如果不清楚一个系统是否需要命令模式,一般就不要原创 2021-03-15 14:22:29 · 253 阅读 · 0 评论 -
设计模式C++实现——观察者模式
观察者模式:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。它还有两个别名,依赖(Dependents),发布-订阅(Publish-Subsrcibe)。可以举个博客订阅的例子,当博主发表新文章的时候,即博主状态发生了改变,那些订阅的读者就会收到通知。博主与读者之间存在一对多的依赖关系。下面给出相应的UML图设计:可以看到博客类中有一个观察者链表(即订阅者),当博客的状态发生变化时,通过Notify成员函数通知所...原创 2021-03-02 20:09:51 · 199 阅读 · 0 评论 -
我所理解的设计模式(C++实现)——策略模式(Strategy Pattern)
概述:每个人都要“交个人所得税”,但是“在美国交个人所得税”和“在中国交个人所得税”就有不同的算税方法。 而策略模式就是对算法进行包装,是把使用算法的责任和算法本身分割开来,委派给不同的对象管理。策略模式通常把一个系列的算法包装到一系列的策略类里面,作为一个抽象策略类的子类。用一句话来说,就是:“准备一组算法,并将每一个算法封装起来,使得它们可以互换”。类图与实例:Context(应用场景):1、需要使用ConcreteStrategy提供的算法。2、内部维护一个Strategy的实例。原创 2021-03-02 14:29:37 · 184 阅读 · 0 评论 -
C++设计模式——适配器模式(对象适配器、类适配器)
前言现在的笔记本都只存在USB接口,嵌入式设备只有串口,两者如何通信呢?可以使用USB转串口线连接电脑和嵌入式设备,其中USB一端连接电脑、串口和外部设备进行通信。嵌入式设备上存在的是串一端连接嵌入式设备。本来电脑和嵌入式设备由于接口不兼容,无法进行通信,而使用USB转串口线这个适配器,两者之间就可以正常进行数据通信。在设计模式中,也存在一种类似的模式,存在两个接口不同的类,可以使用一个适配器类来将一个接口转换为客户希望的另一个接口,称为适配器模式。1、适配器模式在适配器模式中引入了一个被称为适原创 2021-03-02 13:59:33 · 2015 阅读 · 0 评论 -
三种工厂模式的分析以及C++实现
以下是我自己学习设计模式的思考总结。1.简单工厂模式简单工厂模式是工厂模式中最简单的一种,他可以用比较简单的方式隐藏创建对象的细节,一般只需要告诉工厂类所需要的类型,工厂类就会返回需要的产品类,但客户端看到的只是产品的抽象对象,无需关心到底是返回了哪个子类。客户端唯一需要知道的具体子类就是工厂子类。除了这点,基本是达到了依赖倒转原则的要求。假如,我们不用工厂类,只用AbstractProduct和它的子类,那客户端每次使用不同的子类的时候都需要知道到底是用哪一个子类,当类比较少的时候还没什么问题原创 2021-03-02 13:20:05 · 178 阅读 · 0 评论 -
C++的单例模式与线程安全单例模式(懒汉/饿汉)
1 教科书里的单例模式 我们都很清楚一个简单的单例模式该怎样去实现:构造函数声明为private或protect防止被外部函数实例化,内部保存一个private static的类指针保存唯一的实例,实例的动作由一个public的类方法代劳,该方法也返回单例类唯一的实例。 上代码:classsingleton{protected:singleton(){}private:staticsingleton* p;public:...原创 2021-03-01 19:27:44 · 128 阅读 · 0 评论 -
接口设计原则
1、单一原则一个类只负责一个功能领域的相应职责,或者可以定义为,就一个类而言,应该只有一个引起它变化的原因。 单一原则的实现,完全取决于你这么抽象的看待这个问题,你抽象的合适,那么它可以很棒,如果抽象的不够,它可能就是臃肿的类,抽象的过多,有可能创造出一大把寄生类。 单一职责原则这话就像我们常听的那句"做人要坚持"。听起来无懈可击,但是要坚持什么呢,如果这事情看起来不靠谱,做着难受,我还该不该坚持呢,所以'做人要坚持'是句营养不是很足的废话。 单一职责这话也有那么点意思...原创 2020-11-10 13:41:47 · 524 阅读 · 0 评论