大话设计模式——模板方法模式(C++点菜实现)

来源:互联网 发布:http协议传输数据 编辑:程序博客网 时间:2024/05/21 07:55

模板方法模式是把不变的代码移到超类中,去除子类中的重复代码。 只把动态改变的地方交给子类多态去实现。

代码如下,基类是固定的菜谱,子类实现了A和B各点多少份菜。 A B不关心菜谱有什么,只关心自己应该点多少份。


class Menu{public:Menu();~Menu();void OrderPork(){std::cout << "红烧肉:" << getPorkNum() << "份" << std::endl;}void OrderPotato(){std::cout << "土豆泥:" << getPotatoNum() << "份" << std::endl;}void OrderFish(){std::cout << "水煮鱼:" << getFishNum() << "份" << std::endl;}virtual int getPorkNum(){return 0;}virtual int getPotatoNum(){return 0;}virtual int getFishNum(){return 0;}};

#include "Menu.h"class MenuPersonA :public Menu{public:MenuPersonA();~MenuPersonA(); int getPorkNum (){return 3;}int getPotatoNum (){return 4;} int getFishNum(){return 5;}};

#include "Menu.h"class MenuPersonB :public Menu{public:MenuPersonB();~MenuPersonB();int getPorkNum() override{return 4;} int getPotatoNum()override{return 1;} int getFishNum()override{return 2;}};

客户端调用:

int _tmain(int argc, _TCHAR* argv[]){Menu *PersonA = new MenuPersonA();Menu *PersonB = new MenuPersonB();PersonA->OrderFish();PersonA->OrderPork();PersonA->OrderPotato();PersonB->OrderFish();PersonB->OrderPork();PersonB->OrderPotato();delete PersonA;delete PersonB;return 0;}


0 0