定义:一个操作的算法的框架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
实现方案:将算法/逻辑框架放在抽象基类中,并定义好实现接口,在子类中实现细节接口。也就是呢,玩游戏,不可能一开始就结束的啦,肯定就要先匹配玩家战斗,直到战斗结束,都是有这个固定的一个过程的,是要按顺序来执行下去的。
#include<iostream>
using namespace std;
class GameTemplate// 抽象类,其实就是一个抽象模板,定义并实现了一个模板方法。
{
public: virtual void PVPBegin () = 0;
virtual void PVPEnd () = 0;
virtual void OverGame() = 0;
void Make()// 模板方法,给出了逻辑骨架,而逻辑的组成是一些相应的抽象操作,推迟到子类实现.就是步骤都是一致的,就是一些细节不一样
{
PVPBegin();
PVPEnd();
OverGame();
}
};
class GloryKings :public GameTemplate//继承抽象类,将每一步功能都实现
{
public:
virtual void Opengame()
{
cout << "王者荣耀排位开始...." << endl;
}
virtual void PVPOver()
{
cout << "王者荣耀排位结束..." << endl;
}
virtual void OverGame()
{
cout << "Victory" << endl;
}
};
class QQSpeed :public GameTemplate
{
public:
virtual void Opengame()
{
cout << "QQ飞车排位开始...." << endl;
}
virtual void PVPmode()
{
cout << "QQ飞车排位结束..." << endl;
}
virtual void OverGame()
{
cout << "Victory" << endl;
}
};
void test()
{
GloryKings* king = new GloryKings;
king->Make();//调用Make的方法,固定的步骤就可以实现了
cout << "------------------------" << endl;
QQSpeed* speed = new QQSpeed;
speed->Make();
}
void main()
{
test();
}
适用于:一些方法通用,却在每一个子类都重新写了这一方法。
优点: 1、封装不变部分,扩展可变部分。 2、提取公共代码,便于维护。 3、行为由父类控制,子类实现。
缺点:每一个不同的实现都需要一个子类来实现,导致类的个数增加,使得系统更加庞大。