命令模式

将一个请求封闭为一个对象,从而让我们可用不同的请求对客户进行参数化;对请求排队或者记录日志,以及支持可撤销的操作。命令模式是一种对象行为型模式,其别名为动作(Action)模式或事务(Transaction)模式。 命令模式可以将请求者和接收者完全解耦,发送者与接收者之间没有直接引用关系,发送请求的对象只需要知道如何发送请求,而不必知道如何完成请求

February 2, 2022 · 1 min · Rick Cui

策略模式

策略模式定义了一系列的算法,并将每个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。

February 1, 2022 · 1 min · Rick Cui

模板方法模式

定义一个操作中算法的框架,而将一些步骤延迟到子类中。模板方法模式使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 class TemplateDrink{ public: virtual void boilWater() = 0; virtual void drew() = 0; virtual void pourCup() = 0; virtual void addSomething() = 0; void make(){ boilWater(); drew(); pourCup(); addSomething(); } }; class Tea : public TemplateDrink{ public: void boilWater() override{ cout << "煮山泉水..." << endl; } void drew() override{ cout << "冲龙井茶..." << endl; } void pourCup() override{ cout << "倒入茶杯中..." << endl; } void addSomething() override{ cout << "加点柠檬....

February 1, 2022 · 1 min · Rick Cui

适配器模式

有一个已经写好的接口,但是不符合需求,适配器就是将已有的接口转化为需要的形式 class MyPrint{ public: void operator()(int a, int b){ cout << a + b << endl; } }; class TargetInterface{ public: virtual void operator()(int v) = 0; }; class MyAdaptor : public TargetInterface{ public: MyAdaptor(int param):param(param){} void operator()(int v){ print(v, param); } private: MyPrint print; int param; }; MyAdaptor myBind2nd(int v){ return MyAdaptor(v); } int main() { vector<int> v; for(int i = 0; i < 10; ++i){ v.push_back(i); } for_each(v.begin(), v....

February 1, 2022 · 1 min · Rick Cui

外观模式

将复杂的子系统抽象到同一个接口进行管理,外界只需要通过此接口与子类系统进行交互,而不必直接与复杂的子类系统进行交互 案例:家庭影院外观模式 实现KTV模式:电视打开,灯关掉,音响打开,麦克风打开,DVD打开 实现游戏模式:电视打开,音响打开,游戏机打开

February 1, 2022 · 1 min · Rick Cui