9、模板方法模式(TemplateMethod)
模板方法模式其實就是有一個帶有虛函數的基類,其實現了相關算法,其算法中包含了虛函數,因爲這些函數需要子類來實現所以在基類中以虛函數呈現,以保證算法的正常編譯。當實現了子類之後在使用時使用基類的指針指向子類,這樣調用接口也一致。
如汽車模型中有一下方法:
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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.