设计模式之模板方法模式
来源:互联网 发布:淘宝快速提升销量 编辑:程序博客网 时间:2024/06/03 08:58
一、模式动机
为了提高代码复用,定义了算法的步骤,而这些步骤的具体实现延迟到子类中。
二、模式定义
模板方法模式(Template Method Pattern):在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变 算法结构的情况下,重新定义算法中的某些步骤。UML图如下:
三、模式示例
下图是星巴兹咖啡师傅的训练手册,用模板方法模式来实现。
C++代码实现:
#include <iostream>using namespace std;class CaffeeineBeverage{public: CaffeeineBeverage(); ~CaffeeineBeverage(); void boilWater() { cout << "把水煮沸" << endl; } void pourInCup() { cout << "倒进杯子" << endl; } virtual void brew() = 0; virtual void addCondiments() = 0; void preparreRecip() { boilWater(); brew(); pourInCup(); addCondiments(); }private:};CaffeeineBeverage::CaffeeineBeverage(){}CaffeeineBeverage::~CaffeeineBeverage(){}class Tea : public CaffeeineBeverage{public: Tea(); ~Tea(); void brew() { cout << "用沸水浸泡茶叶" << endl; } void addCondiments() { cout << "加柠檬" << endl; }private:};Tea::Tea(){}Tea::~Tea(){}class Coffee : public CaffeeineBeverage{public: Coffee(); ~Coffee(); void brew() { cout << "用沸水冲泡咖啡" << endl; } void addCondiments() { cout << "加糖和牛奶" << endl; }private:};Coffee::Coffee(){}Coffee::~Coffee(){}int _tmain(int argc, _TCHAR* argv[]){ Tea MyTea; Coffee MyCoffee; MyTea.preparreRecip(); MyCoffee.preparreRecip(); system("Pause"); return 0;}
运行结果:
四、分析总结
策略模式和模板方法模式都封装算法,一个用组合,一个用继承。模板就是一个方法,这个方法将算法定义成一组步骤,其中的任何步骤都可以抽象的,有子类负责实现。这样可以确保算法的结构保持不变,同时由子类提供部分实现。
阅读全文
0 0
- 设计模式之模板方法模式模板方法模式
- 设计模式之模板方法
- 设计模式之模板方法
- 设计模式之模板方法
- 设计模式之模板方法
- 设计模式之模板方法
- 设计模式之模板方法
- 设计模式之模板方法
- 设计模式之模板方法
- 设计模式之模板方法
- 设计模式之模板方法
- 设计模式之模板方法
- 设计模式之模板方法
- 设计模式之模板方法
- 设计模式之模板方法
- 设计模式之模板方法
- 设计模式之模板方法
- Java设计模式之模板方法模式
- Python 面向对象(初级篇)
- MySQL查询语句练习
- 使用Maven插件来完成Mybatis逆向工程
- Linux设备树中文手册
- JS正则表达式
- 设计模式之模板方法模式
- 设计模式学习笔记--迭代器模式
- 剑指offer11-20(JavaScript)
- MySQL语句之or/in 对于上下级关系sql用法
- 图的邻接表表示法(C语言)
- js判断上传图片的大小、宽高
- 面试:java程序写出四个数的程序,每个数都不能重复 2
- mysql管理工具32和64位,带破解工具
- Java魔法堂:String.format详解