设计模式学习(C++)
记录本人在学习设计模式过程中的理解,以及对应每种设计模式的C++代码实现。
方寸间沧海桑田
欲买桂花同载酒,终不似,少年游
展开
-
设计模式学习(C++)总结
至此,对于设计模式的学习也就告一段落了,这段时间也就相当于走马观花一般地把二十三种设计模式全过了一遍,整体感觉有些模式在实际运用中很常见,但是有些模式似乎没怎么见过,不过这种设计模式的解决问题的核心思想才是学习的关键。 以下即为二十三种设计模式的大意与链接:(我认为重要的模式均进行了加粗处理)一、创建型模式单例模式:保证为一个类只生成唯一的实例对象,分为饿汉式和懒汉式;单例模式工厂模式...原创 2019-05-05 10:43:35 · 474 阅读 · 0 评论 -
设计模式学习(二十二) 迭代器模式 Iterator
1.迭代器模式定义 迭代器模式,官方的定义是“提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示。”其理解起来很容易,因为这就是我们常用的C++容器类中的迭代器的基本含义:通过迭代器的循环遍历来访问容器中的各个元素,其中迭代器是指向各个元素的一种指针。 (所以对于这个模式,我的想法是既然基本容器中已经定义好了,并且很多情况下会比我们自定义的迭代器好用,所以可能只有很少的需...原创 2019-05-03 12:57:56 · 154 阅读 · 0 评论 -
设计模式学习(二十一) 解释器模式 Interpreter
1.解释模式的定义2.解释模式的类图3.解释模式的代码实现#include <iostream>#include <string>using namespace std;class File{public: File(string name) : m_name(name) {} void setname(string name) { m_nam...原创 2019-05-01 19:44:25 · 357 阅读 · 0 评论 -
设计模式学习(二十) 状态模式 State
1.状态模式的定义 状态模式的官方定义如下:“当一个对象的内在状态改变时允许改变其行为,使得这个对象看起来像是改变了其类。”对这句话的简写,就是“通过用户 的状态来改变对象的行为”。 通俗来讲,状态模式就是指一个人做同一个事情,由于其状态的不同,得到结果也就不一样。比如今天精神一般,只能搬1000块砖,明天精神很棒,可以搬2000块砖了,后天精神很差,500块砖都搬不了了。这就是所谓的状态不同...原创 2019-04-30 15:49:54 · 186 阅读 · 0 评论 -
设计模式学习(十九) 访问者模式 Visitor
1.访问者模式的定义 访问者模式的官方定义,就是表示一个作用于某对象结构的各元素的操作,它使你可以在不改变各元素的前提下,定义作用于这些元素的操作。这句话的意思就是,将对象结构这一块的数据结构Element作为一个整体,通过一个结构对象ObjectStructure封装起来;同时访问者Visitor定义一个抽象类,在其内部定义针对这块数据结构中每种结构的执行方式,其通过ObjectStructu...原创 2019-04-30 10:31:03 · 349 阅读 · 0 评论 -
设计模式学习(十八) 备忘录模式 Memento
1.备忘录模式的定义不知道为什么这个星期要做很多事情,又好久没有学习了 备忘录模式,这个模式的名字我总觉得起的不恰当,根据现代人的理解,似乎称之为存档/读档模式更好一点,毕竟备忘录对我来说,只是临时记录一下一些很重要的事情,但是这个模式本身却是标准的存档,然后觉得不行了获取存档的功能。所以我觉得对我个人而言,称其为存档/读档模式似乎更恰当一点。...原创 2019-04-29 09:23:57 · 150 阅读 · 0 评论 -
设计模式学习(十七) 观察者模式 Observer
1.观察者模式的定义工作让人头昏眼花对于观察者模式,官方的定义是“用于定义对象间一种一对多的依赖关系,使得每一个对象改变状态,则所有依赖于他们的对象都会得到通知。”,说穿了,就是对于对象的状态监控,将对象的状态改变变为信号,通过这个状态改变的信号,用于做别的事情。而观察者模式,这个名字其实理解性不是很高,他还有另一个名字—发布/订阅模式(publish/subscribe)。这样就更便于...原创 2019-04-26 17:31:18 · 243 阅读 · 0 评论 -
设计模式学习(十六) 中介者模式 Mediator
1.中介者模式的定义写在前面:中介者模式让我理解了很久,因为这个模式很贴近于我们的生活,因为所谓的这种“中介者”在我们的日常生活中遍地开花,但也正是如此,我在想把这种模式生活中的某种实例结合在一起时,我才发现其中的细节真的是需要多加揣摩才行。 中介者模式,其传统定义为用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显示的相互引用,从而降低耦合,而且可以独立地改变它们之间的交互。...原创 2019-04-24 19:14:14 · 206 阅读 · 0 评论 -
设计模式学习(十五) 策略模式 Strategy
1.策略模式的定义 策略模式常用在算法选用中,其主要是定义一个抽象的算法接口,并通过继承该抽象算法接口对所有算法加以封装和实现,而具体的算法选择过程在客户端中实现。 个人理解上,我觉得策略模式主要适用于需要对某个对象多次转换所用算法时用到。因为这个策略主要是封装一系列算法(当然不止非得是算法,也可以是不同的普通函数),其调用接口已经分配好了,只需要不断地使用调度接口来切换所用的算法即可实现此策...原创 2019-04-22 21:36:21 · 228 阅读 · 0 评论 -
设计模式学习(十四) 责任链模式 COR
1.责任链模式的定义有些事情回武汉了几天,导致近几天没有学习= =,很是愧疚责任链模式的英文名比较长,是Chain of Responsibility,简称为COR模式。其主要任务是构造一系列担当不同职责的类的对象来共同完成一个任务,这些类的对象之间像链条一样紧密相连。换句话说,这就是我们所熟知的流水线模式,这个责任链就是一个流水线,流水线上工人A完成了他的任务,然后交给之后的工人B来接...原创 2019-04-22 19:33:06 · 632 阅读 · 0 评论 -
设计模式学习(十三) 命令模式 Command
1.命令模式的定义及类图传统的类调用别的类的过程分为三步:创建目标对象的实例;设置调用所需类的函数;调用目标对象的方法。而Command模式即为使用一个专门的类对这种调用过程加以封装,请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。其主要适用于将一个请求封装为一个对象(类),从而可以使用不同的请求对客户端进行参数化...原创 2019-04-18 20:53:37 · 356 阅读 · 0 评论 -
设计模式学习(十二) 模板模式 Template
1.模板模式的定义与类图从这里开始进入行为型模式阶段,行为型模式主要是指用来对类或对象怎样交互和怎样分配职责进行描述。模板模式即指在抽象类中统一操作步骤,并规定好接口,其子类实现接口,从而实现将各个具体的子类和操作步骤解耦合。通俗点说,就是模板类定义了一个/多个确定接口逻辑与步骤的函数,同时定义多个需要重载的接口,子类负责重载这些接口即可,具体的逻辑操作均有基类的逻辑函数来确定,客户端调用...原创 2019-04-17 20:46:50 · 211 阅读 · 0 评论 -
设计模式学习(十一) 享元模式 FlyWeight
1.享元模式的定义及类图写在前面:首先在学习这些设计模式的过程中,我参考了也查看了很多其他前辈们所写的相关优秀介绍。但是在我自己写自己的东西的过程中,一般我都写得比较少,不能写的像前辈们那样细致和精细。我所要表达的,仅仅就是我自己所理解所感悟的东西,而不是将一个设计模式挖深挖透,对此我没有精力去做,也没有时间去做。其次,对于写的这些东西的类图以及函数,都是根据我自己的理解,在StartUML...原创 2019-04-17 16:54:14 · 164 阅读 · 0 评论 -
设计模式学习(十) 外观模式 Facade
1.外观模式的定义与类图外观模式的理解很简单,其就是为一组有类似功能的类群,比如类库、子系统等等,提供一个一致的简单界面(类比于一套外用接口也可以),主要是为了让子系统更容易使用。具体的类图如下:由图可见外观模式的类图十分简单粗暴,通过客户端Client调用外观模式Facade的类实现子系统的操作。而外观模式Facade中将各个子系统作为其关联对象(成员变量),在其中建立不同的函数来调用单...原创 2019-04-17 10:54:50 · 157 阅读 · 0 评论 -
设计模式学习(九) 组合模式 Composite
1.组合模式的定义以及类图组合模式通俗点来讲,就是数据结构中的树结构。其适用于单个对象和组合对象的使用具有一致性时(最典型的就是目录结构),将对象组合合成树形结构,以表示“部分-整体”。具体的构造,根据其类图可以很容易看出来,其类图如下:根据类图可知,组合模式主体为一个抽象基类,其派生类为叶节点对象和枝节点对象,其中叶节点就是标准的末端节点,其没有对应的子节点,所以只继承相关的功能函数Op...原创 2019-04-16 21:55:54 · 173 阅读 · 0 评论 -
设计模式学习(八) 桥接模式 Bridge
1.桥接模式的定义与类图桥接模式的定义相对拗口:基于类的最小设计原则,通过使用封装,聚合以及继承等行为来让不同的类承担责任,且其主要特点是把抽象与行为实现分离开来,从而保证各部分的独立性与功能拓展。通俗一点来讲,就是以两个抽象基类作为起始源,其中一个抽象基类为主体部件,另一个抽象为部分部件,主体部件用于定义一个物体(比如一辆自行车),其中包含了调用所有部分部件的函数;而部分部件可以有很多种(比...原创 2019-04-16 15:25:30 · 311 阅读 · 0 评论 -
设计模式学习(七) 适配器模式 Adapter
1.适配器模式的概念与类图适配器模式即根据所需接口,改变已有类的接口形式,来匹配所需接口。其主要适用于将一个类的接口转换为客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。具体的类图构造如下:根据类图可知,客户端调用的是抽象接口Target,而其主要通过适配器类Adapter来将现有的类Adaptes转换为对应的接口。换句话说,适配器类Adapter并不会主...原创 2019-04-16 10:14:33 · 154 阅读 · 0 评论 -
设计模式学习(六) 装饰模式 Decorator
1. 装饰模式的定义与类图分析装饰模式即把要添加的附加功能分别放在单独的类中,并让此类包含其所要装饰的类(对象);其主要用于给一个固定对象添加一些额外的职责,且该模式比生成子类的方式更为灵活。通俗点说,装饰模式类似于我们玩RPG游戏,被装饰的对象就是我们自己,而装饰对象就是游戏中的各种武器道具等等,而这些装饰对象比如武器又分为刀剑棍棒等等子系类别。其具体的类图构造如下:首先我感觉我的类图画的...原创 2019-04-15 21:25:15 · 185 阅读 · 0 评论 -
设计模式学习(五) 代理模式 Proxy
代理模式的定义和类图从代理模式开始进入结构型模式的学习阶段,而结构模式的宗旨是让类与类进行组合,获取各大的结构。而代理模式属于其中最典型的一种,具体来说,代理类与被代理类都是为了实现某个对象,但是代理类可以在代理类的功能实现过程中(前后)进行一些处理工作。其具体的结构形式如其类图所示:根据代理模式的类图课件,代理类与被代理类都是为了实现同样的一个功能Request,而被代理类实现的功能为其...原创 2019-04-15 14:47:12 · 202 阅读 · 0 评论 -
设计模式学习(四) 原型模式 Prototype
原型模型的概念与类图原型模式,其具体的应用情况是将一个复杂的对象设计为具有自我复制功能,其统一一套接口。其实现过程和拷贝构造函数很像,即对一个类进行深拷贝/浅拷贝得到其大量的复制体,不过有所区别的原型模型的原型为抽象基类,而拷贝构造函数所有的类中几乎都有。其具体的类图构造如下:其类图构造十分简单,在主函数main中调用抽象基类来与其子类不断的new出其克隆对象,从而实现对一个复杂的抽象基类...原创 2019-04-12 20:59:11 · 203 阅读 · 2 评论 -
设计模式学习(三) 建造者模式 Builder
1.建造者模式的基本概念与构成建造者模式,通俗点来说,就是设计者,工程队与产品之间的三方联调模式,具体产品中包含自己的成员,以及对成员的定义与读取方式;而工程队分为抽象构造者和具体构造者,抽象构造者中均为虚函数,用于提供所有具体构造者的接口,而具体构造者也就是直接通过接口,对应具体产品中的变量与函数来实现具体的功能。设计者则负责直接调用抽象工程队,这样就在无需更改代码的情况下可以随意使用继承自抽...原创 2019-04-11 10:44:10 · 169 阅读 · 0 评论 -
设计模式学习(二) 工厂模式 Factory
工厂模式的概念工厂模式的实际操作效果和其名字一样,并非是通过直接创建对象的方式来实现,其主要依靠于工厂这个创建体来实现对象的创建。具体情况下,其分为简单工厂模式,工厂模式以及抽象工厂模式。不同工厂模式的区别与实现2.1 简单工厂模式简单工厂模式即为静态工厂模式,其并不属于标准的23种设计模式之一。具体是通过创建所有对象的父类,而该父类负责描述所有实例所共有的公共接口,具体的类图可以...原创 2019-04-09 20:07:57 · 480 阅读 · 0 评论 -
设计模式学习(一) 单例模式 Singleton
1.单例模式的定义:单例模式属于创建者模式,顾名思义,即保证为一个类只生成唯一的实例对象。其结构可以简单粗暴地用以下类图来表示:由其类图可见,单例的成员仅有类型为其自身Singleton的参数Instance,而方法为构造函数和单例实现函数GetInstance()。其中GetInstance为静态方法,主要负责创建自己的唯一实例(在创建完成之后,返回所创建的自己)2.单例模式的使用情况...原创 2019-04-08 17:34:28 · 1128 阅读 · 0 评论