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