![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
设计模式
@Moota
文章仅作闲的很闲的学习记录,不想咸鱼就快跑!!!
展开
-
设计模式-简介
学习笔记: 设计模式的六大原则 1.开闭原则 即:对扩展开放,对修改关闭。别去修改已有的代码,除非你本来写的就有问题。。。 2.里氏代换原则 即:任何基类可以出现的地方,子类一定可以出现。 基类=子类,基类调用子类的方法。 3.依赖倒转原则 即:依赖于抽象而不依赖于具体 4.接口隔离原则 即:像单一功能,别什么都写在一起,降低耦合 5.最少知道原则 即:一个实体尽量少的与其他实体发生作用,像互相调用啥的,相对独立。 6.合成复用原则 即:少用继承,多用组合。 ...原创 2021-07-01 18:40:06 · 71 阅读 · 0 评论 -
设计模式-MVC模式
学习笔记:MVC模式 模式简介 :代表Model-View-Controller(模型-视图-控制器)模式。这种模式用于程序的分层开发。 为什么用 :有条理的写程序,减少耦合。 怎么样用 :把功能分为数据,视图,操作三个类来写。 注意事项 :尽量采用这种写法。 实际举例 :人物信息的展示。 #include <iostream> using namespace std; //人物模型 class PersonModel{ private: string name; string原创 2021-07-12 13:37:52 · 86 阅读 · 1 评论 -
设计模式-策略模式
学习笔记:策略模式 模式简介 :属于行为型模式 为什么用 : 怎么样用 : 注意事项 : 实际举例 :原创 2021-07-12 13:12:26 · 65 阅读 · 0 评论 -
设计模式-访问者模式
学习笔记:访问者模式 模式简介 :属于行为型模式,元素对象接受访问者对象,访问者处理元素对象的操作。 为什么用 :解决稳定的数据结构和易变的操作耦合的问题。 怎么样用 :在访问者类直接使用元素对象的元素进行操作。 注意事项 :数据访问的合法性。 实际举例 :UI管理游戏全局设置。 #include <iostream> using namespace std; //设置 class Setting {}; //音乐设置 class Setting_Music :public Setting {原创 2021-07-12 11:26:45 · 60 阅读 · 0 评论 -
设计模式-模板模式
学习笔记:模板模式 模式简介 :属于行为型模式,抽象类公开执行它方法的模板。 为什么用 :对于一件事的步骤,子类有不同的细节,父类写好了总的方法,就可以让子类实现具体的细节。比如都是玩,但是玩的具体内容不一样。 怎么样用 :父类里写了抽象方法,总的方法,抽象方法由一个总的方法调用,子类实现了抽象方法,就可以调用具体方法。 注意事项 :总的方法要封装不变的,扩展可变的。 实际举例 :不同的角色加入游戏。 #include <iostream> #include <vector> us原创 2021-07-12 10:55:46 · 58 阅读 · 0 评论 -
设计模式-空对象模式
学习笔记:空对象模式 模式简介 :在此模式中,使用一个空对象取代NULL对象实例的检查。 为什么用 :一般使用NULL作为空值,但是使用空对象,提供一个具有默认行为的对象更合适。 怎么样用 :对正常的对象提供默认的实现方法就行了。 注意事项 :默认对象可以用来实现一些其他的功能。 实际举例 :游戏正常账号和封禁账号。 #include <iostream> #include <vector> using namespace std; //账号 class User { protect原创 2021-07-11 19:22:51 · 67 阅读 · 0 评论 -
设计模式-状态模式
学习笔记:状态模式 模式简介 :属于行为型模式,类的行为是基于它的状态而改变的。 为什么用 :对象在不同的状态对于同一件事物有不同的行为,把这种不同抽象出来,就可以不写if-else语句了。 怎么样用 :把需要抽象的方法写成一个类,每个子类实现相应状态下的方法。这样通过申请不同的状态类,就可以实现不同的功能。 注意事项 :确保状态不会太多。 实际举例 :游戏宠物的状态变化。 #include <iostream> #include <vector> using namespace s原创 2021-07-11 18:31:57 · 58 阅读 · 0 评论 -
设计模式-观察者模式
学习笔记:观察者模式 模式简介 :属于行为型模式,存在一对多的关系时使用。 为什么用 :当一个对象发生一些变化时,需要通知与变化相关的所有类。 怎么样用 :直接在对象中调用其他类的变化相关的方法。 注意事项 :其他类也有要通知的类是,别写成死循环了。 实际举例 :地图通知用户消息。 #include <iostream> #include <vector> using namespace std; //人物 class Person { private: string nam原创 2021-07-10 12:39:33 · 66 阅读 · 0 评论 -
设计模式-备忘录模式
学习笔记:备忘录模式 模式简介 :属于行为型模式,保存一个对象的某个状态,以便在适当的时候恢复对象。 为什么用 :记录状态就可以实现回到原先保存的状态。??? 怎么样用 :需要保存的类数据写成一个结构体,类里提供获取和设置数据的方法,再写一个仓库类管理数据,也提供获取和设置数据的方法,实现总体管理数据。 注意事项 :可以结合原型模式使用。 实际举例 :游戏多存档实现。 #include <iostream> #include <vector> using namespace std;原创 2021-07-10 10:28:40 · 65 阅读 · 0 评论 -
设计模式-中介者模式
学习笔记:中介者模式 模式简介 :属于行为型模式,用来降低多个对象相互通信的复杂度。 为什么用 :解耦解耦,使得对象之间不必显式的相互引用。 怎么样用 : 注意事项 : 实际举例 :原创 2021-07-09 22:46:28 · 61 阅读 · 0 评论 -
设计模式-迭代器模式
学习笔记:迭代器模式 模式简介 :属于行为型模式,提供了顺序访问集合对象元素的方法,不需要知道集合对象的底层表示。 为什么用 :就是提供一种方法访问集合对象。 怎么样用 :写一个迭代器接口,让存储对象的类实现这个接口,提供可以让外部使用的迭代器实例,实现访问。 注意事项 :c++内部类如何访问外部类的成员。 实际举例 : #include<iostream> #include <vector> using namespace std; //游戏物品 class Item { publ原创 2021-07-08 21:31:29 · 75 阅读 · 0 评论 -
设计模式-解释器模式
学习笔记:解释器模式 模式简介 :属于行为型模式,提供了评估语言的语法或者表达式的方式。 为什么用 :如果一个特定类型的问题发生的频率足够高,那么就值得将该问题的实例独立出来。这样可以构建一个解释器,解释器解释句子来解决问题。 怎么样用 : 注意事项 : 实际举例 : ...原创 2021-07-08 20:40:59 · 61 阅读 · 0 评论 -
设计模式-命令模式
学习笔记:命令模式 模式简介 :属于行为型模式,请求以命令的形式包裹在对象中,并传给调用对象。 为什么用 :请求发出者和实现者往往是一种直接调用的关系,这样导致在处理撤销,记录行为方面难以处理,把命令包装成对象方便解耦。 怎么样用 :把对象的方法写成对象,实现一个共同的接口,然后写个类管理所有的命令。 注意事项 :命令可能有点多。 实际举例 :人物移动命令实现。 #include<iostream> #include <vector> using namespace std; cla原创 2021-07-08 10:25:19 · 61 阅读 · 0 评论 -
设计模式-责任链模式
学习笔记:责任链模式 模式简介 :属于行为型模式,对请求的发送者和接受者解耦。 为什么用 :对于一个需求,可能有很多对象可以接受处理,一旦某个对象无法处理,就把请求传给更高级的对象。 怎么样用 :处理请求的对象实现统一的接口,每个对象内有指向下一级处理对象的指针,根据处理等级来决定请求的处理对象。 注意事项 :严格按处理等级来,避免循环嵌套。 实际举例 :游戏控制台信息打印 #include<iostream> using namespace std; class Log { public:原创 2021-07-08 09:42:02 · 72 阅读 · 0 评论 -
设计模式-代理模式
学习笔记:代理模式 模式简介 :属于结构型模式,一个类代表另一个类的功能。 为什么用 :虽然申请了一个类,但是不想直接去调用它实现功能,否则可能造成一些麻烦,比如用户使用安全问题啥的。 怎么样用 :写了A类,再写一个代理B类,代理B类有A的实例成员,构造时传入A类实例,通过B类调用A类方法,但是做出调整和限制。 注意事项 :c++申请友元类才能调用私有和保护成员。 实际举例 :技能查看人物信息。 #include<iostream> using namespace std; //游戏人物 cla原创 2021-07-06 20:35:51 · 56 阅读 · 0 评论 -
设计模式-享元模式
学习笔记:享元模式 模式简介 :属于结构型模式,主要减少创建对象的数量,提高性能。 为什么用 :有些对象一申请就很多,而且要反复申请,不如用个东西存放起来重复使用。 怎么样用 :对于一个要申请很多实例的类,写另外一个类,类里有收集申请类实例的集合,外界申请时就从另外的类的集合中调用,发现存在已有对象就直接用。 注意事项 :多线程的时候可能要注意。 实际举例 :游戏怪物刷新。 #include <iostream> #include <vector> using namespace s原创 2021-07-04 14:16:55 · 69 阅读 · 0 评论 -
设计模式-外观模式
学习笔记:外观模式 模式简介 :属于结构型模式,它隐藏了系统的复杂性,并向客户端提供一个可以访问的接口。 为什么用 :写的功能太多了,但是害怕用户找不到,或者难以使用,写在一起使用。 怎么样用 :写一个管理类,类内有其他的功能类,想实现一个特定功能就写一个函数把过程封装起来。外界通过管理类调用该函数实现功能,而不用去管实现的细节。 注意事项 :功能可以单个实现也可以组合使用。 实际举例 :游戏快捷指令的实现。 #include <iostream> #include <iomanip>原创 2021-07-04 11:45:03 · 70 阅读 · 0 评论 -
设计模式-装饰器模式
学习笔记:装饰器模式 模式简介 :属于结构型模式,它是作为现有的类的一个包装,允许向一个类添加新的功能,又不改变结构。 为什么用 :对于一个类,想实现一些功能,但是又不想写子类。 怎么样用 :写一个新的类成为其子类,这新类的构造函数参数包含父类的指针,方法是要装饰的方法。在实例化时,只要父类指针不为空,就执行该方法,实现递归执行,最终回到最初的父类,即我们要装饰的对象,而沿途执行的方法实现了装饰。 注意事项 :常识:父类对象的方法是虚方法,不然调用不了子类的函数。 实际举例 :游戏buff的动态增加。 #i原创 2021-07-03 23:37:00 · 69 阅读 · 0 评论 -
设计模式-组合模式
学习笔记:组合模式 模式简介 :属于结构性模式,创建了对象组的树形结构,又叫部分整体模式。 为什么用 :当一堆对象具有层次关系,功能又相似时,不写成树的结构还有天理吗? 怎么样用 :就像数据结构中的n叉树,写一个类,类里有一个存放这个类指针的数组或者集合,这样通过一个头类?!就可以访问它数组里的其他类,而其他类可以访问自己数组里放的类。这就实现多级管理的效果。 注意事项 :可以在类增加一个指向父类的指针,方便从基层到高层。 实际举例 :游戏多级菜单的实现。 #include <iostream>原创 2021-07-03 21:36:46 · 71 阅读 · 0 评论 -
设计模式-过滤器模式
学习笔记:过滤器模式 模式简介 :属于结构型模式,使用不同的标准过滤一组对象 为什么用 :提供一种合理的筛选对象的方式。 怎么样用 :根据对象集合的相关属性,设置筛选规则,比如属性>=某个数,就保留。 注意事项 :写好基础的规则,以及集合的交并补。 实际举例 :装备的筛选机制。 #include <iostream> #include <vector> #include <string> using namespace std; //类别枚举 enum class原创 2021-07-03 16:32:44 · 77 阅读 · 0 评论 -
设计模式-桥接模式
学习笔记:桥接模式 模式简介 :属于结构型模式,用于抽象化与实现化的解耦,使得二者可以独立变化 为什么用 :一个类有很多子类,子类有不同的实现,但是不同的实现可以独立出来,写出来更灵活 怎么样用 :对不同的实现写一个总的接口,让父类调用它的接口, 这样在实例化的子类中就能直接调用不同的实现接口的方法。 注意事项 :学习抽象的编程。 实际举例 :生成带有不同掉落buff的不同级别怪物。 #include <iostream> using namespace std; //怪物掉落buff的变化 c原创 2021-07-03 10:54:05 · 78 阅读 · 0 评论 -
设计模式-适配器模式
学习笔记:适配器模式 模式简介 :属于结构型模式,是两个不兼容的接口之间的桥梁。 为什么用 :让两个独立的类的接口产生联系,本来A类和B类没关系,我在B类写个兼容的接口,让接口可以接受A类的对象,就能让B的方法使用A类进行操作了。 怎么样用 :写个B类的适配器类,类里提供要适配的方法,A类继承并实现这个适配器的方法,在B类里,通过适配器调用A类实现的适配的方法。 注意事项 :只在特别需要的时候才用适配器,过多的使用,代码不好看。 实际举例 :创意工坊,游戏显示自定义的物品信息。 #include <i原创 2021-07-02 16:07:12 · 64 阅读 · 0 评论 -
设计模式-原型模式
学习笔记:原型模式 模式简介 :属于创建型模式,提供了创建对象的最佳方式。 为什么用 :有些对象创建它就要花费很大的代价,不缓存一下数据用不起。 怎么样用 :对于一个已经存在的类,写另外一个类,里面有一个已存在类的实例,其他时候想要访问时就通过另外这个类来读取已存在类的实例,就不用new了。 注意事项 :只是简单的缓存数据,注意深拷贝和浅拷贝的区别。 实际举例 : #include <iostream> #include <Windows.h> using namespace std原创 2021-07-02 12:41:34 · 54 阅读 · 0 评论 -
设计模式-建造者模式
学习笔记:建造者模式 模式简介 :属于创建型模式,使用多个简单的对象一步一步构建一个复杂的对象。提供了一种创建对象的最佳方式。 为什么用 :我想创建的这个复杂的对象是不稳定的,有可能需要这个,也可能不需要这个,选择需要的组合。 怎么样用 :首先保证这多个简单的对象有共同的父类,实现了相同的方法,再写个组装的,把需要的对象放到一起,最后写个builder把不同的组装过程封装起来。 注意事项 :当简单对象具有可以抽象出来的共同点才使用。 实际举例 :掉落或者铸造武器的实现 #include <iostre原创 2021-07-02 11:09:46 · 80 阅读 · 0 评论 -
设计模式-单例模式
学习笔记:单例模式 模式简介 :属于创建型模式,提供了一种创建对象的最佳方式 为什么用 :有些对象只要一个就行了,不需要也不能有多个对象~ 怎么样用 :(1)该对象的申请方式私有,只提供一个访问点,访问它仅有的一个实例。 注意事项 :多线程操作安全问题。简单就提前实例化好,c++ static关键字保证实例只被初始化和定义一次 实际举例 :比如说之前抽象工厂模式的攻击工厂的管理者,可以写成到单例模式,毕竟程序只要一个管理者实例就够了。 #include #include #include using原创 2021-07-02 10:06:49 · 60 阅读 · 0 评论 -
设计模式-抽象工厂模式
学习笔记:抽象工厂模式 模式简介 :属于创建型模式,提供了一种创建对象的最佳方式。 为什么用 :工厂模式会产生很多接口,但我不想申请具体的接口。 怎么样用 :(1)按之前的抽象工厂模式设计出多个Factory类的生产函数,在写一个总的Factory类,进行管理。 注意事项 :这就是一个工厂生产具体的工厂,具体的工厂生产具体的对象的过程。 实际举例 :实现角色的不同攻击方式 #include <iostream> using namespace std; //父类技能 class Skill {原创 2021-07-02 08:56:40 · 69 阅读 · 0 评论 -
设计模式-工厂模式
学习笔记:工厂模式 模式简介 :最常用,属于创建型模式,使用一个总的接口管理。 为什么用 :一个对象,就能根据自己的需要,实现调用不同的方法。 怎么样用 : (1)先写一个父类,里面放个待实现的函数,再写一堆子类,实现父类的那个函数,这样,申请一个父类对象,赋上子类的值,就能调用不同的子类的方法。 (2)再把这个封装一下,写个Factory类,里面写个返回值为父类,参数是字符串的函数,具体内容就是根据不同的字符串的值返回,不同的子类对象。因为子类可以赋值给父类嘛,这样就通过这个函数,实现了工厂模式。 注意事原创 2021-07-01 23:55:55 · 70 阅读 · 0 评论