设计模式
m米咔00
这个作者很懒,什么都没留下…
展开
-
23种设计模式(c++实现)学习总结
七大基本原则23设计模式依据七大基本原则,从个人理解,其最根本原则为开闭原则,其他原则都是基于开闭原则的具体阐述,而23种设计模式又是基于这七大原则的具体时下,个人理解其结构如下:23种设计模式创建型模式主要负责类对象的创建,根据需求实现方便、有序、高效的创建方法,其包含的五种模式特性、区别和联系如下:单例模式主要负责单个特殊对象的创建,可以方便实现资源的共享,并保证对象的独有性...原创 2020-02-02 11:11:39 · 363 阅读 · 0 评论 -
设计模式学习(C++实现)19——解释器模式
概述当某些问题重复出现且具有一定的规律性和相似性时,我们可以将其中的规律抽取出来,作为一个个解释器来解释,并将解释的结果拼接起来,用更上层的解释器解释,直到最高层的解释器返回最终结果,例如自然语言,具有明显的规律(一个句子由主语谓语宾语组成),其成分也具有明显规律(主语主要是代词和名词,谓语主要是动词,宾语主要是代词和名词),因此可以定义几个解释器进行相应的解释;再比如加减组成的复合运算(a+b...原创 2020-01-30 22:13:54 · 163 阅读 · 0 评论 -
设计模式学习(C++实现)18——备忘录模式
概述以word为例,我们经常会使用撤销和前进操作,那么意味着这个系统必然会存储其历史状态,保证撤销时能够读取,这时候就可以使用备忘录模式,也称谓快照模式。代码实现struct State{ int index; std::string name; bool is_error;};class StateManager{public: State GetLatestSt...原创 2020-01-29 00:20:29 · 113 阅读 · 0 评论 -
设计模式学习(C++实现)17——访问者模式
概述当我们存在一些固定的元素组合,而有一些针对这些元素的访问者,每个访问者针对不同的元素有不同的处理,这时候就可以采用访问者模式。例如,电影院在放映三场电影,有很多观众回去看,并且给予不同的评价,这里三场电影就是固定元素,观众就是访问者;再比如,系统的某个模块收到了一些固定的数据,有不同的模块需要访问并进行不同的处理,这里数据就是固定元素,不同模块是访问者。代码实现class Elemen...原创 2020-01-28 23:49:39 · 107 阅读 · 0 评论 -
设计模式学习(C++实现)16——中介模式
概述中介模式,顾名思义,通过一个中介来完成信息的流动,例如找房子,每个人可以直接跟另一个人联系买房,但如果人数很多,而买方又希望多方比价,那么每个人跟每个人之间的关系会变得十分复杂,而且效率较低,在现实生活中,我们往往通过中介来解决这个问题,所有人(无论买方或是卖方),都将信息发送到中介,再从中介获取信息,或者使用观察者模式订阅某个信息,中介主要起到信息转发的作用;同样的类似QQ,会先将消息发送...原创 2020-01-27 23:15:24 · 118 阅读 · 0 评论 -
设计模式学习(C++实现)15——观察者模式
概述观察者模式在实际应用中,主要适用一对多的消息订阅情景,即一些观察者会监视或者说订阅某个事件或者信号,一旦该事件或者信号发生,则通知所有订阅者进行相应的响应。在Window的窗口程序中应用十分广泛,当用户点击某个按键时,订阅了该按键点击事件的所有观察者作出响应,完成程序对于用户点击这一事件的响应。代码实现class Observer{public: virtual void Res...原创 2020-01-27 22:35:41 · 109 阅读 · 0 评论 -
设计模式学习(C++实现)14——状态模式
概述状态模式就是日常经常使用的状态机,例如线程存在睡眠、运行、停止、僵死等各种状态,在不同状态时线程对于不同的输入有不同的响应,外部也可以根据线程的状态作不同的操作;同样的,在机器人体系中,也经常使用状态机,表示机器人的不同状态,以实现不同状态下的不同响应。代码实现///前置声明class State;class Context{public: Context(); vo...原创 2020-01-27 22:17:23 · 272 阅读 · 0 评论 -
设计模式学习(C++实现)13——策略模式
概述与桥接模式类似,只不过桥接模式是将一个类的部分属性抽离为一个继承体系,再通过组合的方式加入该类中,而策略模式是将一个类的部分方法抽离为一个继承体系,再通过组合的方式加入该类中,例如暑期出行为一个类,出行的方式可能有很多,坐火车或者坐飞机,那么可以将交通方式抽离为一个继承体系,通过接口传入,以适配更灵活的使用场景,并实现类与接口的解耦,符合迪米特原则。代码实现class Transpor...原创 2020-01-27 17:12:00 · 164 阅读 · 0 评论 -
设计模式学习(C++实现)12——模板方法模式
概述继承最基本的使用方式之一,在父类中确定整体框架以及部分公用接口,将部分可能会有变化的接口延迟到子类中实现,以实现多态。例如很多个系统的初始化流程都是:提示初始化信息,获取配置,初始化,打印系统信息,其中提示初始化信息和打印系统信息所有系统都相同,另外两个接口在不同系统中可能会有变化,就可以将其留在子类中实现。代码实现class System {public: void Start(...原创 2020-01-27 16:48:23 · 121 阅读 · 0 评论 -
设计模式学习(C++实现)7——适配器模式、装饰器模式、代理模式、外观模式
适配器模式、装饰器模式和代理模式有些类似,又有些不同,他们的实现形式差不多,都是对已有的方式和类进行封装,以实现适配、增强或者加以控制的目的/1 适配器模式例如多功能读卡器,可插入多种不同的卡,完成读取数据的功能。class CardReader{public: virtual void read()=0; virtual bool accepted_dataty...原创 2018-07-13 14:49:42 · 415 阅读 · 0 评论 -
设计模式学习(C++实现)11——迭代器模式
迭代器模式被STL大量使用,熟悉c++的一般都用得很多,它提供了一种统一且便捷的对不同容器遍历的形式,使得学习和使用语言变得很简单。class myVector{public: myVector(int s):size(s){ data=new int[size]; } class iterator{ public: it...原创 2018-07-17 11:20:00 · 189 阅读 · 0 评论 -
设计模式学习(C++实现)1——工厂模式
如字面意思所述,工厂模式即设计一个工厂,使用者不需要关心工厂内部的实现过程,只需要通过相应的接口来得到想要的产品,例如一个shape工厂,可以生产circle、rectangle、square,在应用中只需要生成一个工厂类,就可以通过这个工厂类的接口来生成不同的产品: class Shape {public: virtual void draw() = 0;};class Circ原创 2017-09-18 16:37:51 · 438 阅读 · 0 评论 -
设计模式学习(C++实现)2——抽象工厂模式
抽象工厂模式与工厂模式基本类似,只是新创建了一个抽象工厂类和生成工厂类,可以理解为将工厂也作为一种产品生成,就如同形状工厂生成不同形状一样,生成工厂类生成不同的工厂: //各种形状class Shape {public: virtual void draw() = 0;};class Circle :public Shape{public: void draw() ov原创 2017-09-19 20:08:40 · 314 阅读 · 0 评论 -
设计模式学习(C++实现)4——建造者模式
建造者模式即搭建一些小类,并用一些小类通过不同方式拼接实现不同的大类,就像造房子一样,通过使用小工具去搭建大型工具,再用大型工具搭建整座房子。 //建造者模式class item {public: virtual string name() = 0; virtual int price() = 0;};class stationary :public item {pub原创 2017-09-19 23:53:12 · 373 阅读 · 0 评论 -
设计模式学习(C++实现)5——原型模式
原型模式即将常用的一些类的实例加载到缓存中,形成一些原型,需要使用该类对象时直接从原型复制得到其复制体,主要用于类似数据库存储等资源优化的情况下。 //原型模式class Shape {public: int getid() { return id; } void setid(const int &i) { id = i; }原创 2017-09-20 16:35:28 · 244 阅读 · 0 评论 -
设计模式学习(C++实现)3——单例模式
单例模式,顾名思义,设计一个类,在程序的运行过程中只能生成其一个实例,实现要点是将构造函数设为私有的。 //单例模式class SingleObject { SingleObject() {} static SingleObject *instance;public: static SingleObject *getInstance() { if (in原创 2017-09-19 20:18:18 · 326 阅读 · 0 评论 -
设计模式学习(C++实现)8——享元模式
享元模式在实现形式上与单例有点类似,不同的是它扩展到了多个对象,通过共享的方式来减少对象创建的数量,达到提高性能、改善结构的目的。class pen{public: pen(string _color):color(_color){} void draw(){ std::cout<<"I'm a "<<color<<" ...原创 2018-07-16 11:35:38 · 155 阅读 · 0 评论 -
设计模式学习(C++实现)9——责任链模式
某个事件有一系列的处理者都可能处理,因此将这些处理者用一个链表连接起来,将该事件延该链表依次传递,一旦某个处理者解决该事件就不再继续传递,自定义该链表可保证处理者的优先级,这种模式可以保证系统的处理顺序按照设定顺序来而不至于变得混乱,可应用于大部分事件处理的地方如log记录、错误处理等。class Event{public: Event(int t):type(t){} in...原创 2018-07-16 11:57:26 · 139 阅读 · 0 评论 -
设计模式学习(C++实现)10——命令模式
使用很多的一种设计模式,将命令或者事件封装成对象,从而实现解耦的目的,使命令的产生和执行两个过程在不同的地方发生。class order{public: virtual void execute()=0;}class MoveFoward:public order{public: void execute(){ std::cout&lt;&lt;"...原创 2018-07-16 14:58:48 · 134 阅读 · 0 评论 -
设计模式学习(C++实现)6——桥接模式
在设计类的时候,将抽象类与其实现解耦,使得类的不同成员和功能得以分别变化,以达到在使用类时,用户可以对其进行定制的目的,可以看作是一种变相的多态原创 2017-10-11 17:42:30 · 189 阅读 · 0 评论