【C++设计模式】
设计模式笔记
越甲八千
置身其中,全力以赴
展开
-
简单工厂模式VS策略模式
简单工厂模式VS策略模式原创 2023-07-28 17:33:50 · 770 阅读 · 0 评论 -
里氏替换原则
参考:https://blog.csdn.net/iteye_15898/article/details/82280610?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1.pc_relevant_default&depth_1-utm_source=distribute.pc_relevant_t0.none-task-bl原创 2022-04-19 10:40:56 · 770 阅读 · 0 评论 -
简单工厂模式和策略模式的区别
学习了设计模式就会发现,简单工厂模式和策略模式的UML几乎是一样的,那两者的却别到底是什么呢,搜集资料,加上个人理解整理如下: 1、简单工厂模式中只管创建实例,具体怎么使用工厂实例由调用方决定,他只负责创建具体对象; 2、策略模式是将生成实例的使用策略放在策略类中配置后才提供调用方使用。 3、 简单工厂模式调用方可以直接调用工厂实例的方法属性等; 4、策略模式不能直接调用实例的方法属性,需要在策略类中封装策略后调用。 总结来说就是 简单工厂模式–》创建对象 策略模式–》封装策略(算法) ..原创 2021-03-01 23:06:03 · 1735 阅读 · 0 评论 -
享元模式(19)
享元模式 运用共享技术有效地支持大量细粒度的对象。原创 2020-12-07 22:53:49 · 1538 阅读 · 0 评论 -
备忘录模式(18)
备忘录模式 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样以后就可以将该对象恢复到原先保存的状态。 学习这个设计模式,突然想到英雄联盟里的一个英雄,时间刺客艾克 (百度百科)时间刺客·艾克是MOBA竞技网游《英雄联盟》第125位英雄。 艾克是一个叛逆而又聪明的坏小子,同时也是一个天不怕地不怕的小神童,靠着自己的发明创造混迹于祖安的黑暗街道。 在游戏中艾克是一个擅于长期作战的强力游击型刺客,可以凭借自己的高机动性以及减速和击晕等控制技能将敌人撕成碎片。如果他在战斗当中处于原创 2020-12-04 23:00:14 · 1609 阅读 · 0 评论 -
设计模式-前言
设计模式 1995 年,GoF(Gang of Four,四人组/四人帮)合作出版了《设计模式:可复用面向对象软件的基础》一书,共收录了 23 种设计模式,从此树立了软件设计模式领域的里程碑,人称「GoF设计模式」。其实就是软件开发过程中的套路,参考这些前辈总结的套路能够大大提高我们的开发效率和开发质量。 ...原创 2020-11-16 20:05:08 · 1197 阅读 · 0 评论 -
一、UML图
转载自:http://www.uml.org.cn/oobject/201905073.asp 感谢感谢作者; 为了方便自己记忆模糊时查看 举一个简单的例子,来看这样一副图,其中就包括了UML类图中的基本图示法。 首先,看动物矩形框,它代表一个类(Class)。类图分三层,第一层显示类的名称,如果是抽象类,则就用斜体显示。第二层是类的特性,通常就是字段和属性。第三层是类的操作,通常是方法或行为...转载 2020-02-27 21:20:06 · 1151 阅读 · 1 评论 -
二、设计模式的基本原则
设计模式的基本原则 1、单一职责原则 定义:就一个类而言,应该只有一个引起该类变化的原因。 一个类只有一个职责,如果职责过多,代码就会臃肿,可读性更差,也更难以维护,主要体现面向对象的高内聚低耦合。 2、开闭原则(Open Close Principle) 定义:软件实体(类、模块、函数)应该可以扩展,但是不可修改。 开闭原则的意思是:对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码。 3、依赖倒转原则(Dependence Inversion Principle) 定义:高层模块不原创 2020-11-16 22:05:28 · 1402 阅读 · 0 评论 -
三、道阻且长之单例模式
今天好好总结一下单例模式 首先什么是单例模式: 《设计模式》一书中给出的定义是:让类自身负责保存它的唯一实例,这个类可以保证没有其他实例被创建(通过截取创建新对象的请求),并且它可以提供一个访问该实例的方法,这就是Singleton模式。有人叫单例模式,也有叫单件模式。那么如何实现以上要求呢?首先,需要保证一个类只有一个实例;在类中,要构造一个实例,就必须调用类的构造函数,如此,为了防止在外...原创 2018-04-05 11:46:32 · 1209 阅读 · 0 评论 -
九、简单工厂模式
简单工厂模式C++ 简单工厂模式,是一种实例化对象的方式,根据自身实际情况来实例化自己需要的对象,可以通过工厂类来实例化自己需要的类。工厂类是创造类,负责创建实例,父类的方法为虚函数,子类继承父类方法,重新实现。根据C++多态的特性实例化一个对象,在对象进行调用函数时,会动态的绑定调用子类重新实现的函数。 UML图如下: C++代码如下: #include<iostream> usi...原创 2019-04-27 11:37:10 · 1283 阅读 · 0 评论 -
四、观察者模式
观察者模式 观察者模式:定义了一种一对多的依赖关系,让多个观察者对象同事监听同一主题对象,当这个主题对象发生变化时,能够通知到所有观察者,使他们能够自动更新自己原创 2020-11-20 16:55:29 · 1384 阅读 · 0 评论 -
五、状态模式
状态模式 允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类,(State Pattern)是设计模式的一种,属于行为模式。 定义 (源于Design Pattern):当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。 状态模式主要解决的是当控制一个对象状态的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同状态的一系列类中,可以把复杂的判断逻辑简化。 模式中的角色 1 上下文环境(Context):它定义了客户程序需要的接口并维护一个具体状态角色的实例,原创 2020-11-13 14:55:02 · 1176 阅读 · 0 评论 -
组合模式(17)
#include<iostream> #include<list> #include<string> using namespace std; //将对象组合成树形结构以表示“部分-整体”的层次结构。 //组合模式使得用户对单个对象和组合对象的使用具有一致性 class Company { public: Company(string name) { m_name = name; } virtual ~Company(){} virtual void Add(C.原创 2020-12-02 22:19:41 · 1576 阅读 · 0 评论 -
原型模式(16)
原型模式 用原型指定创建对象的种类,并且通过拷贝这些原型创建新的对象 其关键点在于clone函数,调用clone函数来创建更多相同类型的对象 #include<iostream> #include<list> using namespace std; //将一个请求封装成一个对象,从而使你可用不同的请求对客户进行参数化 //父类 Resume:简历 class Resume { protected: char *name;//有指针类型,防止浅拷贝 public原创 2020-12-01 22:52:12 · 1489 阅读 · 0 评论 -
工厂模式(21)
工厂模式 定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使类的实例化延迟到子类。 定义一个用于创建对象的接口:在虚工厂基类提供一个接口,用于创建产品接口; 让子类决定实例化哪一个类:产品虚基类提供一个创建产品的接口,具体实例化要子类实现。 #include<iostream> #include <assert.h> using namespace std; //手机 class PHONE { public: virtual void ReadImei(){}/原创 2020-12-01 22:02:59 · 1549 阅读 · 0 评论 -
六、模板方法模式
先写上代码,后续添加文字补充 #include&lt;iostream&gt; using namespace std; //抽象类, //在父类中定义操作的算法骨架,而具体的实现由子类完成 class resume { protected: virtual void setedu(){} virtual void setage(){} virtual void setexp(){} p...原创 2019-01-05 21:45:06 · 1099 阅读 · 0 评论 -
抽象工厂模式(22)
抽象工厂模式 提供一个创建一系列相关或者相互依赖的接口,而无须指定他们具体的类。 对比工厂模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类。抽象工厂和工厂都是创建接口,只是抽象工厂创建的接口多而已。 ...原创 2020-12-01 22:00:55 · 1388 阅读 · 0 评论 -
七、外观模式
#include<iostream> using namespace std; //外观模式:为子系统提供一个一支的洁面,定义一个 //高层的接口,这一接口使得子系统更加容易使用 class system1 { public: void method1() { cout<<"method1"<<endl; } }; class system2 { ...原创 2019-01-06 14:33:04 · 1032 阅读 · 0 评论 -
八、桥接模式
一般问题:一个类需要在两个以上维度扩展,采用继承方式会导致子类数量过多 核心方案:将抽象部分与实现部分分离,使其都可以独立变化 设计意图:桥接模式不是将两个不相干的类链接,而是将一个需要多维度变化的类拆分成抽象部分和实现部分,并且在抽象层对两者做组合关联,是用组合的方式来解决继承的问题。举个例子,如果一个类在两个维度分别有m和n种变化,采用继承的方式就需要扩展出m*n个子类,且一个维度每增加一种变化就多出另一个维度变化总数的子类;如果将两个维度拆分再组合,加起来也只有m+n个子类,且每个维度独立扩展,一个维原创 2020-11-12 14:22:20 · 1198 阅读 · 0 评论 -
十、中介者模式
中介者模式:用一个中介对象来封装一系列的对象交互。中介者使得对象不需要相互的引用,从而使其耦合松散,可以独立的改变他们之间的交互。 #include<iostream> #include<string> using namespace std; class Country; //抽象类 联合国 class UN { public: virtual void delcar...原创 2019-01-20 19:05:00 · 1107 阅读 · 0 评论 -
十一、职责链模式
#include&lt;iostream&gt; #include&lt;string&gt; using namespace std; //请求 class request { public: string type;//类型 int count;//数量 string content;//内容 public: request(string m_type, int len ,string...原创 2019-01-20 16:21:23 · 1123 阅读 · 0 评论 -
十二、备忘录模式
#include<iostream> using namespace std; //状态存储箱 class Roleststemento { public: int attack; int defends; public: Roleststemento(int m_attc, int m_defends):attack(m_attc),defends(m_defends){}...原创 2019-01-19 16:23:13 · 1101 阅读 · 0 评论 -
十三、适配器模式
#include<iostream> #include<string> using namespace std; //抽象球员类 class player { protected: string m_name; public: player(string str_name):m_name(str_name){} virtual void attack(){}; v...原创 2019-01-19 15:19:29 · 1078 阅读 · 0 评论 -
十四、建造者模式
#include<iostream> #include<list> #include<string> using namespace std; class product { list<string>ls; public: void add(string m_str) { ls.push_back(m_str); } void sh...原创 2019-01-17 20:27:20 · 1075 阅读 · 0 评论 -
十五、装饰模式
#include<iostream> #include<string> using namespace std; //抽象接口 手机 class Phone { public: Phone(){} virtual void ShowDecorate(){} }; //具体类 苹果 class Iphone:public Phone { string m_name; p...原创 2019-01-14 23:40:49 · 1122 阅读 · 0 评论 -
二十三、命令模式
命令模式 命令模式是一个比较难理解的模式,我看了好久、查阅了很多博客,根据我自己的理解记录如下: 命令模式:将一个请求封装成一个对象,从而使你可用不同的请求对客户进行参数化 举例子:一个餐厅有广东厨师负责烧广东菜、四川厨师负责烧四川菜,一个服务员负责点菜、传菜; 那么他的整个运行流程是这样的,服务员记录客人点的菜----》通知后厨师傅开始做菜–》后厨师傅开始做自己负责的菜。 代码如下:其核心就是这个流程:整个运行流程是这样的,服务员记录客人点的菜----》通知后厨师傅开始做菜–》后厨师傅开始做自己负责的菜原创 2020-11-30 21:25:05 · 1344 阅读 · 0 评论