作用:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤
其关键是将通用算法(逻辑)封装在抽象基类中,并将不同的算法细节放到子类中实现
代码:
#includeusing namespace std;class Game{public: virtual ~Game() {}public: virtual void initialize() = 0; virtual void startPlay() = 0; virtual void endPlay() = 0; virtual void play() { initialize(); //初始化游戏 startPlay(); //开始游戏 endPlay(); // 结束游戏 }};class FootballGame : public Game{public: virtual void initialize() { cout << "FootballGame initialize" << endl; } virtual void startPlay() { cout << "FootballGame begin" << endl; } virtual void endPlay() { cout << "FootballGame end" << endl; }};class BasketballGame : public Game{public: virtual void initialize() { cout << "BasketballGame initialize" << endl; } virtual void startPlay() { cout << "BasketballGame begin" << endl; } virtual void endPlay() { cout << "BasketballGame end" << endl; }};void test(){ Game *game = new BasketballGame(); game->play(); delete game; game = new FootballGame(); game->play(); delete game; game = NULL;}int main(){ test(); cin.get(); return 0;}
效果:
模板(Templeate)模式(Strategy)和策略模式的区别:
模板模式采用继承的方式实现,将逻辑(算法)框架放在抽象基类中,并定义好细节的接口,子类中实现细节。
策略模式采用组合的方式,将逻辑(算法)框架放在一个类中。