未使用设计模式时,代码如下:
#include <QCoreApplication>
//程序库开发人员
class Library{
public:
void Step1(){}
};
//应用程序开发人员
class Application{
public:
void Step2(){}
};
int main(int argc, char *argv[]) {
QCoreApplication a(argc, argv);
Library lib;
Application app;
lib.Step1();
app.Step2();
return a.exec();
}
如果Step1和Step2是比较稳定的逻辑时,可以将Step2以虚函数(纯虚函数)写在Library中。
使用设计模式后,代码如下:
#include <QCoreApplication>
//程序库开发人员
class Library{ //稳定 template method
public:
void Run(){
Step1();
Step2(); //支持变化 ==> 虚函数的多态调用
}
virtual ~Library(){ }
protected:
void Step1() {} //稳定
virtual void Step2();//变化
};
//应用程序开发人员
class Application : public Library {
protected:
virtual void Step2(); //... 子类重写实现
};
int main(int argc, char *argv[]) {
QCoreApplication a(argc, argv);
Library* pLib=new Application();
pLib->Run();
delete pLib;
return a.exec();
}
这样,应用开发人员,只要继承Library,再重新实现Step2即可。
使用该模式的前提是,要划分清楚哪部分是稳定的,哪部分是变化的。
将稳定的写在父类中,而变化的在子类中实现,这也是多态。