大话设计模式——模板方法模式(C++点菜实现)
2014-06-05 21:02
435 查看
模板方法模式是把不变的代码移到超类中,去除子类中的重复代码。 只把动态改变的地方交给子类多态去实现。
代码如下,基类是固定的菜谱,子类实现了A和B各点多少份菜。 A B不关心菜谱有什么,只关心自己应该点多少份。
客户端调用:
代码如下,基类是固定的菜谱,子类实现了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; }
相关文章推荐
- 大话设计模式--模板方法模式 TemplateMethod -- C++ 实现
- 大话设计模式C++实现-第10章-模板方法模式
- 大话设计模式--模板方法模式 TemplateMethod -- C++ 实现
- 行为模式之模板方法模式(Template Pattern)C++实现
- 设计模式C++实现(4)——原型模式、模板方法模式
- (C++实现)——模板方法模式(Template Method Pattern)
- 设计模式C++实现(5)——原型模式、模板方法模式
- 设计模式C++实现(5)——原型模式、模板方法模式
- 模板方法模式c++实现
- 设计模式C++实现(5)——原型模式、模板方法模式
- 模板方法模式----C++实现
- 设计模式C++实现(5)——原型模式、模板方法模式
- [设计模式]_[中级]_[模板方法C++例子实现举例]
- 设计模式C++实现(5)——原型模式、模板方法模式
- 设计模式C++实现(5)——原型模式、模板方法模式
- c++ 实现模板方法模式
- 设计模式C++实现(5)——原型模式、模板方法模式
- C++高效实现模板方法模式
- 设计模式C++实现(5)——原型模式、模板方法模式
- 模板方法模式(Template Method Pattern)-c++实现