定义一个操作的算法的框架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
实现方案:将算法/逻辑框架放在抽象基类中,并定义好实现接口,在子类中实现细节接口。
注:策略模式,解决的是相同的问题,只是其方案是将各个接口封装为类,通过委托/组合方式解决问题
①优点
封装不变部分/逻辑框架,扩展可变部分/具体细节
提取公共部分代码,便于维护
行为由父类控制,子类实现-->基本方法子类实现,因此子类可以通过扩展的方式增加相应的功能,符合开闭原则
②缺点
因为模板方法将依赖点到,抽象中的框架实现依赖具体类的细节实现。所以是子类行为影响了父类。在复杂项目中,会造成代码阅读困难。
#include <iostream>
using namespace std;
class Car
{
public:
virtual void doOpen() = 0;
virtual void doClose() = 0;
virtual void doRun() = 0;
void start()
{
doOpen();
doClose();
doRun();
}
};
class BMCar :public Car
{
void doOpen()
{
cout << "开车门----" << endl;
}
void doClose()
{
cout << "关车门-------" << endl;
}
void doRun()
{
cout << "go go go" << endl;
}
};
int main()
{
BMCar *pCar = new BMCar;
pCar->start();
return 0;
}