模板方法模式其实就是有一个带有虚函数的基类,其实现了相关算法,其算法中包含了虚函数,因为这些函数需要子类来实现所以在基类中以虚函数呈现,以保证算法的正常编译。当实现了子类之后在使用时使用基类的指针指向子类,这样调用接口也一致。
如汽车模型中有一下方法:
void Run();
protected:
virtual void Start() = 0;
virtual void Stop() = 0;
virtual void Alarm() = 0;
virtual void EngineBoom() = 0;
virtual bool IsAlarm();
方法 void Run();实现了算法,在此算法中需要使用Start等虚函数,这些函数因具体子类而不同。
在子类Car_a和Car_b中分别实现了各自对应基类中虚函数的这些函数实体。
main()
{
CarModel *ph1 = new Car_a();
ph1->Run();
delete ph1;
CarModel *ph2 = new Car_b();
ph2->Run();
delete ph2;
Car_a *ph11 = new Car_a(); //此处指针不能使用CarModel类型,因SetAlarm函数是Car_a自身独有的。
ph11->SetAlarm(false);
ph11->Run();
delete ph11;
}
如汽车模型中有一下方法:
void Run();
protected:
virtual void Start() = 0;
virtual void Stop() = 0;
virtual void Alarm() = 0;
virtual void EngineBoom() = 0;
virtual bool IsAlarm();
方法 void Run();实现了算法,在此算法中需要使用Start等虚函数,这些函数因具体子类而不同。
在子类Car_a和Car_b中分别实现了各自对应基类中虚函数的这些函数实体。
main()
{
CarModel *ph1 = new Car_a();
ph1->Run();
delete ph1;
CarModel *ph2 = new Car_b();
ph2->Run();
delete ph2;
Car_a *ph11 = new Car_a(); //此处指针不能使用CarModel类型,因SetAlarm函数是Car_a自身独有的。
ph11->SetAlarm(false);
ph11->Run();
delete ph11;
}