定义一个操作中的算法,将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定的步骤。
优点:
1、封装不变部分,扩展可变部分。
2、提供公共代码,便于维护。
3、行为由父类控制,子类实现。
缺点:
每一个不同的实现都需要一个子类来实现,导致类的个数增加,使得系统庞大
代码实现:
#pragma once
#include "iostream"
using namespace std;
class Game
{
public:
// 以游戏为例
void Play()
{
StartPlayGame();
InitializeGame();
EndPlayGame();
}
// 开始游戏
virtual void StartPlayGame() = 0;
// 初始化游戏
virtual void InitializeGame() = 0;
// 结束游戏
virtual void EndPlayGame() = 0;
};
// Game A
class GameA : public Game
{
private:
void StartPlayGame() override
{
cout << "Start Play Game A" << endl;
}
void InitializeGame() override
{
cout << "Initialize Game A" << endl;
}
void EndPlayGame() override
{
cout << "End Play Game A" << endl;
}
};
// Game B
class GameB : public Game
{
private:
void StartPlayGame() override
{
cout << "Start Play Game B" << endl;
}
void InitializeGame() override
{
cout << "Initialize Game B" << endl;
}
void EndPlayGame() override
{
cout << "End Play Game B" << endl;
}
};
int main()
{
GameA* MyGameA = new GameA();
MyGameA->Play();
GameB* MyGameB = new GameB();
MyGameB->Play();
delete MyGameA; MyGameA = nullptr;
delete MyGameB; MyGameB = nullptr;
}
运行结果: