模板方法模式的定义如下:
定义一个算法的框架,而将一些步骤延迟到子类中。使得子类在不改变算法结构情况下,就可以重新定义该算法的某些特定步骤。
#include <iostream>
class CarModel{
public:
//定义存在的基本方法
virtual void start() = 0;
virtual void stop() = 0;
virtual void alarm() = 0;
//定义模板方法
void run()
{
this->start();
this->alarm();
this->stop();
}
};
class Volkswagen : public CarModel{
public:
Volkswagen(){};
virtual ~Volkswagen(){};
protected:
//实现基本方法
virtual void start(){
std::cout<<"Volkswagen start"<<std::endl;
}
virtual void stop(){
std::cout<<"Volkswagen stop"<<std::endl;
}
virtual void alarm(){
std::cout<<"Volkswagen alarm"<<std::endl;
}
};
class Benz : public CarModel{
public:
Benz(){};
virtual ~Benz(){};
protected:
//实现基本方法
virtual void start(){
std::cout<<"Benz start"<<std::endl;
}
virtual void stop(){
std::cout<<"Benz stop"<<std::endl;
}
virtual void alarm(){
std::cout<<"Benz alarm"<<std::endl;
}
};
int main() {
CarModel* VolkswagenCar = new Volkswagen();
VolkswagenCar->run();
CarModel* BenzCar = new Benz();
BenzCar->run();
delete VolkswagenCar;
delete BenzCar;
VolkswagenCar = nullptr;
BenzCar = nullptr;
return 0;
}
输出:
Volkswagen start
Volkswagen alarm
Volkswagen stop
Benz start
Benz alarm
Benz stop