设计模式 -- 模板方法模式 TemplateMethod
2013-11-04 17:06
651 查看
模板方法模式:在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。
核心:通过把不变的行为放到基类,去除子类中的重复代码达到复用的目的。但是,具体的步骤已经在基类中写好了,子类只是有不同的实现罢了。
一个小技巧,钩子的使用可以使得算法更灵活。
小例子:喝茶 or 喝咖啡
核心:通过把不变的行为放到基类,去除子类中的重复代码达到复用的目的。但是,具体的步骤已经在基类中写好了,子类只是有不同的实现罢了。
一个小技巧,钩子的使用可以使得算法更灵活。
小例子:喝茶 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; } /* 煮水 冲咖啡 把水倒入杯子中 煮水 泡茶 把水倒入杯子中 加柠檬 */
相关文章推荐
- 设计模式——模板方法模式( Template Method Pattern)
- 设计模式:模板方法模式-template method
- 设计模式 - Template Method Pattern(模板方法模式)
- 如何让孩子爱上设计模式 ——24.模板方法模式(Template Method Pattern)
- 设计模式入门之模板方法模式TemplateMethod
- 二十四种设计模式:模板方法模式(Template Method Pattern)
- 设计模式之模板方法Template Method
- java设计模式之模板方法模式Template method
- 您的设计模式——模板方法模式【Template Method Pattern】
- 设计模式9 - 模板方法模式【Template Method Pattern】
- 设计模式之模板方法模式---template method
- c++设计模式----模板方法template method
- Template Method Design Pattern - 模板方法设计模式
- 设计模式之模板方法模式 templateMethod
- JAVA设计模式之 模板方法模式【Template Method Pattern】
- java设计模式 模板方法模式Template Method
- 设计模式19:Template Method Pattern (模板方法模式)
- 设计模式 - Template Method Pattern(模板方法模式)
- Java设计模式 Design Pattern:模板方法 Template Method
- 乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)