文章目录
- 一、创建者模式
- 1)工厂模式
- 2)原型模式
- 3)建造者模式
- 4)单例(单件)模式
- 二、行为型模式
- 1)策略模式
- 2)观察者模式
- 3)命令模式
- 4)迭代器模式
- 5)状态模式
- 6)中介者模式
- 7)备忘录模式
- 8)职责链模式
- 9)访问者模式
- 10)解释器模式
- 三、结构型模式
- 1)组合Composite
- 2)享元Flyweight
- 3)代理模式Proxy
- 4)适配器模式Adapter
- 5)桥接模式Bridge
- 6)外观模式
一、创建者模式
1)工厂模式
①简单工厂:
介绍:比如游戏里面任何一个obj都是一个实体Entity,这个Entity就是父类,子类就是怪物Monster、玩家Player、NPC、静态物品Doodad
构成:一个实体父类Entity、三个子类(每个子类有自己的构造函数)、一个怪物工厂类(根据传入参数静态方法生成怪物)
总结:每个构造函数实现了创建怪物的流程,实现不同对象的业务逻辑代码隔离
②工厂方法:
介绍:如果怪物是雨林、城市、沙漠,玩家的职业如果是盗贼、剑士、狂战士等等,那么写那么多细化的类
③抽象工厂:
介绍:由于新增的工厂类是工厂模式必须付出的代价,不太可取,可以简化成人物类、怪物类、静态物品类(尽可能的缩小类的范围,减少重复的可以抽象简化的类)
2)原型模式
介绍:通过一个对象克隆出一摸一样的对象
构成:
一个怪物父类Mosnter(创建Monster是虚函数,子类实现)、静态物品类玩家类NPC类调用各个类的构造函数,返回Monster对象(记得在子类自己写拷贝构造函数,不然两个对象都是同一个,但是之前的对象已经在函数结束的时候析构了)
//深拷贝Stack(const Stack& st) {_array = (DataType*)malloc(sizeof(DataType) * st._capacity);if (_array == nullptr) {perror("malloc fail");return;}//只需要自己创建一块与st1相同大小的堆空间,其他的还是拷贝st1的数据memcpy(_array, st._array, _capacity = st._capacity);_size = st._size;_capacity = st._capacity;}
3)建造者模式
用途:通常用来构建一个比较复杂的对象,一般是按照一定顺序分步步骤进行(比如构建服务器之间的消息体,有些是自定义消息,有些是protobuf二进制消息)
注意:①虚函数不能放在构造或析构函数里面
构成:日报包括标题、内容、结尾
①日报的标题构造类、②日报的内容构造类、③日报的结尾类、④利用三个类构造日报的导出类(这里有时候需要导出XML
,有时候导出文本
,那么就可以抽象出父类和子类,如下)
FileBuider* pfb = new TxtFileBuilder(); //父类指针指向子类对象,txt导数类和文本导出类继承自FileBuider
FileDirector* pDtr = new FileDirectore(pfb);//FileDirector是文本管理类
cout<< pDtr->Construct(xxx)<<endl;//生成文档