模板模式
阿新 • • 發佈:2017-05-05
sin namespace 邏輯 tar sta log -a using opened
作用:定義一個操作中的算法的骨架,而將一些步驟延遲到子類中。模板方法使得子類可以不改變一個算法的結構即可重定義該算法的某些特定步驟
其關鍵是將通用算法(邏輯)封裝在抽象基類中,並將不同的算法細節放到子類中實現
代碼:
#include <iostream> using namespace std; class Game { public: virtual ~Game() {} public: virtual void initialize() = 0; virtual void startPlay() = 0; virtual void endPlay() = 0View Code; 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)和策略模式的區別:
模板模式采用繼承的方式實現,將邏輯(算法)框架放在抽象基類中,並定義好細節的接口,子類中實現細節。
策略模式采用組合的方式,將邏輯(算法)框架放在一個類中。
模板模式