设计模式之 templatemethod
来源:互联网 发布:python linix开发工具 编辑:程序博客网 时间:2024/06/09 20:05
常见设计模式的解析和实现(C++)之十一-TemplateMethod模式
作用:
定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。TemplateMethod 使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
UML结构图:
抽象基类:
1)AbstractClass:抽象基类,定义算法的轮廓
解析:
TemplateMethod 的关键在于在基类中定义了一个算法的轮廓,但是算法每一步具体的实现留给了派生类.但是这样也会造成设计的灵活性不高的缺点,因为轮廓已经定下来了要想改变就比较难了,这也是为什么优先采用聚合而不是继承的原因.
实现:
1)TemplateMethod.h
2)TemplateMethod.cpp
3)Main.cpp
定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。TemplateMethod 使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
UML结构图:
抽象基类:
1)AbstractClass:抽象基类,定义算法的轮廓
解析:
TemplateMethod 的关键在于在基类中定义了一个算法的轮廓,但是算法每一步具体的实现留给了派生类.但是这样也会造成设计的灵活性不高的缺点,因为轮廓已经定下来了要想改变就比较难了,这也是为什么优先采用聚合而不是继承的原因.
实现:
1)TemplateMethod.h
/********************************************************************
created: 2006/07/20
filename: TemplateMethod.h
author: 李创
http://www.cppblog.com/converse/
purpose: TemplateMethod模式的演示代码
*********************************************************************/
// 抽象基类,定义算法的轮廓
class AbstractClass
{
public:
AbstractClass(){}
virtual ~AbstractClass(){}
// 这个函数中定义了算法的轮廓
void TemplateMethod();
protected:
// 纯虚函数,由派生类实现之
virtual void PrimitiveOperation1() = 0;
virtual void PrimitiveOperation2() = 0;
};
// 继承自AbstractClass,实现算法
class ConcreateClass
: public AbstractClass
{
public:
ConcreateClass(){}
virtual ~ConcreateClass(){}
protected:
virtual void PrimitiveOperation1();
virtual void PrimitiveOperation2();
};
created: 2006/07/20
filename: TemplateMethod.h
author: 李创
http://www.cppblog.com/converse/
purpose: TemplateMethod模式的演示代码
*********************************************************************/
// 抽象基类,定义算法的轮廓
class AbstractClass
{
public:
AbstractClass(){}
virtual ~AbstractClass(){}
// 这个函数中定义了算法的轮廓
void TemplateMethod();
protected:
// 纯虚函数,由派生类实现之
virtual void PrimitiveOperation1() = 0;
virtual void PrimitiveOperation2() = 0;
};
// 继承自AbstractClass,实现算法
class ConcreateClass
: public AbstractClass
{
public:
ConcreateClass(){}
virtual ~ConcreateClass(){}
protected:
virtual void PrimitiveOperation1();
virtual void PrimitiveOperation2();
};
2)TemplateMethod.cpp
/********************************************************************
created: 2006/07/20
filename: TemplateMethod.cpp
author: 李创
http://www.cppblog.com/converse/
purpose: TemplateMethod模式的演示代码
*********************************************************************/
#include "TemplateMethod.h"
#include <iostream>
void AbstractClass::TemplateMethod()
{
PrimitiveOperation1();
PrimitiveOperation2();
}
void ConcreateClass::PrimitiveOperation1()
{
std::cout << "PrimitiveOperation1 by ConcreateClass/n";
}
void ConcreateClass::PrimitiveOperation2()
{
std::cout << "PrimitiveOperation2 by ConcreateClass/n";
}
created: 2006/07/20
filename: TemplateMethod.cpp
author: 李创
http://www.cppblog.com/converse/
purpose: TemplateMethod模式的演示代码
*********************************************************************/
#include "TemplateMethod.h"
#include <iostream>
void AbstractClass::TemplateMethod()
{
PrimitiveOperation1();
PrimitiveOperation2();
}
void ConcreateClass::PrimitiveOperation1()
{
std::cout << "PrimitiveOperation1 by ConcreateClass/n";
}
void ConcreateClass::PrimitiveOperation2()
{
std::cout << "PrimitiveOperation2 by ConcreateClass/n";
}
3)Main.cpp
/********************************************************************
created: 2006/07/20
filename: Main.cpp
author: 李创
http://www.cppblog.com/converse/
purpose: TemplateMethod模式的测试代码
*********************************************************************/
#include "TemplateMethod.h"
#include <stdlib.h>
int main()
{
AbstractClass* pConcreateClass = new ConcreateClass;
pConcreateClass->TemplateMethod();
delete pConcreateClass;
system("pause");
return 0;
}
模板算法,算法框架实现在基类,具体实现由子类实现,通过多态来实现相同算法的不同实现。这个机制和STL模板函数+
函数对象 一样,这个模式是运行时动态,STL采用的是编译时静态。
转载自:http://www.cppblog.com/converse/archive/2006/07/27/10614.html
- 设计模式之 templatemethod
- android设计模式之TemplateMethod
- 设计模式之模板方法模式(TemplateMethod)
- 设计模式之模板模式-TemplateMethod
- 23设计模式之模板方法(TemplateMethod)
- 23设计模式之模板方法(TemplateMethod)
- 设计模式--TemplateMethod 模式
- 设计模式之七、模板方法模式TemplateMethod
- 设计模式解析和实现之十一-TemplateMethod模式
- 设计模式入门之模板方法模式TemplateMethod
- iOS 设计模式之模版方法模式 (TemplateMethod)
- 设计模式总结之TemplateMethod Pattern(模版方法模式)
- 设计模式--模版方法(TemplateMethod)
- 行为模式之十---TemplateMethod
- c++设计模式(16)-TemplateMethod 模式
- 设计模式 -- 模板方法模式 TemplateMethod
- C++设计模式-TemplateMethod模板方法模式
- C++设计模式-TemplateMethod模板方法模式
- UNIX 高手的重大秘密
- SSH2+Crystal Report,重复行
- 非常有用的网站-职场
- 关于const char *的使用方法
- glBlendFunc()的参数
- 设计模式之 templatemethod
- C基础网络编程(能用CL编译)
- string : undeclared identifier 出错原因
- struct net_device 详解1
- new 二维数组的几种方法
- Access中的MDE文件
- OutLook中“由于本机限制...”无法打开链接问题
- 使用p3p解决iframe中跨域传递cookie
- ASCII码表,经常记不住,放在博客里,呵呵