设计模式行为模式(模板方法模式)
2016-03-24 01:51
253 查看
概念:
定义一个操作中的算法骨架,而将一些步骤延伸到子类中去,使得子类可以不改变一个算法的结构,即可重新定义改算法的某些特定步骤。这里需要复用的是算法的结构,
也就是步骤,而步骤的实现可以在子类中完成。
使用场合:
1.一次性实现一个算法的不变部分,并且将可变的行为留给子类来完成。
2、各子类公共的行为应该被提取出来并集中到一个公共父类中以避免代码的重复。首先识别现有代码的不同之处,并且把不同部分分离为新的操作,最后用一个调用这些新的操作的模板方法来替换这些不同的代码。
3.控制子类的扩展
模板方法模式的组成:
父类角色:提供模板
子类角色:为模板提供实现
父类角色
dataObject.h
*****************************************************************************************************************
*****************************************************************************************************
dataobject.cpp
*****************************************************************************************************
*********************************************************************************************
子类角色
custementconcreteobject.h
****************************************************************************************************************
*****************************************************************************************************************
custementconcreteobject.cpp
***********************************************************************************************************************
***********************************************************************************************************************
客户端 main函数代码
main.CPP
************************************************************************************************************************
a933
*******************************************************************************************************************
定义一个操作中的算法骨架,而将一些步骤延伸到子类中去,使得子类可以不改变一个算法的结构,即可重新定义改算法的某些特定步骤。这里需要复用的是算法的结构,
也就是步骤,而步骤的实现可以在子类中完成。
使用场合:
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();
}
*******************************************************************************************************************
相关文章推荐
- PropertyChangeListener简单理解
- 什么是设计模式
- 设计模式之创建型模式 - 特别的变量问题
- 七、设计模式——装饰模式
- 设计模式总结
- 设计模式之创建型模式
- 浅谈设计模式的学习
- Ruby设计模式编程之适配器模式实战攻略
- 实例讲解Ruby使用设计模式中的装饰器模式的方法
- 设计模式中的模板方法模式在Ruby中的应用实例两则
- Ruby设计模式编程中对外观模式的应用实例分析
- 实例解析Ruby设计模式编程中Strategy策略模式的使用
- Ruby中使用设计模式中的简单工厂模式和工厂方法模式
- Ruby使用设计模式中的代理模式与装饰模式的代码实例
- 详解组合模式的结构及其在Ruby设计模式编程中的运用
- C#编程中使用设计模式中的原型模式的实例讲解
- 使用设计模式中的工厂方法模式进行C#编程的示例讲解
- 实例解析C#设计模式编程中简单工厂模式的使用
- 详解C#设计模式编程中生成器模式的使用
- 深入解析C#设计模式编程中对建造者模式的运用