设计模式 -- 模板方法模式 TemplateMethod
来源:互联网 发布:中国的软件行业 编辑:程序博客网 时间:2024/04/30 15:44
模板方法模式:在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。
核心:通过把不变的行为放到基类,去除子类中的重复代码达到复用的目的。但是,具体的步骤已经在基类中写好了,子类只是有不同的实现罢了。
一个小技巧,钩子的使用可以使得算法更灵活。
小例子:喝茶 or 喝咖啡
//基类:饮料class Beverage {public: virtual void prepareRecipe() { boilWater(); brew(); pourIntoCup(); //钩子代码:判断是否需要加料,毕竟有些人喜欢喝茶喝咖啡不加任何东东 if(wantCondiments()) { addCondiments(); } } void boilWater() { cout << "煮水" << endl; } virtual void brew() = 0; void pourIntoCup() { cout << "把水倒入杯子中" << endl; } virtual void addCondiments() = 0; //钩子代码:虚函数,wantCondiments(),子类根据不同需要去实现;默认是true virtual bool wantCondiments() { return true; }};//子类:咖啡class Coffee : public Beverage {public: void brew() { cout << "冲咖啡" << endl; } void addCondiments() { cout << "加糖和牛奶" << endl; } bool wantCondiments() { return false; }};//子类:茶class Tea : public Beverage {public: void brew() { cout << "泡茶" << endl; } void addCondiments() { cout << "加柠檬" << endl; }};int main(){ //小米喜欢喝咖啡,不加料 Beverage *xiaomiCoffee = new Coffee(); xiaomiCoffee->prepareRecipe(); cout << endl; //大米喜欢喝茶,加料 Beverage *damiTea = new Tea(); damiTea->prepareRecipe(); return 0;}/*煮水冲咖啡把水倒入杯子中煮水泡茶把水倒入杯子中加柠檬 */
- 设计模式 -- 模板方法模式 TemplateMethod
- C++设计模式-TemplateMethod模板方法模式
- 设计模式之模板方法模式(TemplateMethod)
- C++设计模式-TemplateMethod模板方法模式
- 设计模式 模板方法模式 TemplateMethod
- TemplateMethod模板方法模式
- TemplateMethod模板方法模式
- 模板方法模式(TemplateMethod)
- TemplateMethod 模板方法模式
- 23设计模式之模板方法(TemplateMethod)
- 23设计模式之模板方法(TemplateMethod)
- 设计模式-行为设计模式:模板方法设计模式 TemplateMethod
- 设计模式之七、模板方法模式TemplateMethod
- 大话设计模式--模板方法模式 TemplateMethod -- C++ 实现
- 设计模式入门之模板方法模式TemplateMethod
- 设计模式——模板方法模式(TemplateMethod Pattern)
- 设计模式-模板方法模式(templateMethod pattern)
- TemplateMethod(模板方法模式)
- Documentation_cgroups_net_cls
- 汇编语言指令大全
- PhoneGap 常见错误集锦及解决办法
- CSS3 (二) 边框
- 如何从联系人里加载列表(ListView)
- 设计模式 -- 模板方法模式 TemplateMethod
- poj 1064 Cable master 二分长度
- java 静态变量和静态块底层原理
- eclipse常用插件在线安装地址或下载地址
- ZIP BOMB
- Android.mk详细介绍
- alsa lib中ttable相关学习
- PHP的WebServices实现
- 简单的Linux脚本程序