概念:
定义一个操作中的算法骨架,而将一些步骤延伸到子类中去,使得子类可以不改变一个算法的结构,即可重新定义改算法的某些特定步骤。这里需要复用的是算法的结构,
也就是步骤,而步骤的实现可以在子类中完成。
使用场合:
1.一次性实现一个算法的不变部分,并且将可变的行为留给子类来完成。
2、各子类公共的行为应该被提取出来并集中到一个公共父类中以避免代码的重复。首先识别现有代码的不同之处,并且把不同部分分离为新的操作,最后用一个调用这些新的操作的模板方法来替换这些不同的代码。
3.控制子类的扩展
模板方法模式的组成:
父类角色:提供模板
子类角色:为模板提供实现
父类角色
dataObject.h
*****************************************************************************************************************
#ifndef DATAOBJECT_H
#define DATAOBJECT_H
class DataObject
{
public:
DataObject();
virtual void Connect();
virtual void Select();
virtual void Process();
virtual void disconnect();
void Run()
{
Connect();
Select();
Process();
disconnect();
}
};
#endif // DATAOBJECT_H*****************************************************************************************************
dataobject.cpp
*****************************************************************************************************
#include "dataobject.h"
DataObject::DataObject()
{
}
void DataObject::Connect()
{}
void DataObject::Select()
{}
void DataObject::Process()
{}
void DataObject::disconnect()
{}
*********************************************************************************************
子类角色
custementconcreteobject.h
****************************************************************************************************************
#ifndef CUSTEMENTCONCRETEOBJECT_H
#define CUSTEMENTCONCRETEOBJECT_H
#include"dataobject.h"
#include<QString>
class CustementConcreteObject :public DataObject
{
public:
CustementConcreteObject();
void Connect();
void Select();
void Process();
void disconnect();
private:
QString connectionString;
QString commandString;
};
#endif // CUSTEMENTCONCRETEOBJECT_H*****************************************************************************************************************
custementconcreteobject.cpp
***********************************************************************************************************************
#include "custementconcreteobject.h"
#include<QDebug>
CustementConcreteObject::CustementConcreteObject()
{
}
void CustementConcreteObject::Connect()
{
qDebug()<<"connect";
}
void CustementConcreteObject::Select()
{
qDebug()<<"Select";
}
void CustementConcreteObject::Process()
{
qDebug()<<"Process";
}
void CustementConcreteObject::disconnect()
{
qDebug()<<"disconnect";
}***********************************************************************************************************************
客户端 main函数代码
main.CPP
************************************************************************************************************************
#include <QCoreApplication>
#include"custementconcreteobject.h"
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
CustementConcreteObject *concreteobject = new CustementConcreteObject;
concreteobject->Run();
return a.exec();
}*******************************************************************************************************************