设计模式的一些笔记(个人见解参杂各个模式的用途,未完待续0907)

文章目录

    • 一、创建者模式
      • 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)<

4)单例(单件)模式

二、行为型模式

1)策略模式

2)观察者模式

3)命令模式

4)迭代器模式

5)状态模式

6)中介者模式

7)备忘录模式

8)职责链模式

9)访问者模式

10)解释器模式

三、结构型模式

1)组合Composite

2)享元Flyweight

3)代理模式Proxy

4)适配器模式Adapter

5)桥接模式Bridge

6)外观模式

你可能感兴趣的:(c++,设计模式,笔记)