您的位置:首页 > 其它

设计模式行为模式(模板方法模式)

2016-03-24 01:51 253 查看
概念:

  定义一个操作中的算法骨架,而将一些步骤延伸到子类中去,使得子类可以不改变一个算法的结构,即可重新定义改算法的某些特定步骤。这里需要复用的是算法的结构,

也就是步骤,而步骤的实现可以在子类中完成。

使用场合:

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

************************************************************************************************************************

a933

#include <QCoreApplication>


#include"custementconcreteobject.h"

int main(int argc, char *argv[])

{

QCoreApplication a(argc, argv);

CustementConcreteObject *concreteobject = new CustementConcreteObject;

concreteobject->Run();

return a.exec();

}



*******************************************************************************************************************
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  设计模式