您的位置:首页 > 其它

模板方法设计模式--学习笔记

2013-03-17 15:01 447 查看
 

意图:

定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。TemplateMethod使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。

适用环境:

1) 一次性实现一个算法的不变的部分,并将可变的行为留给子类来实现。

2) 各子类中公共的行为应被提取出来并集中到一个公共父类中以避免代码重复。

3) 控制子类扩展。模板方法只在特定点调用“hook ”操作,这样就只允许在这些点进行扩展。

 

结构:



 

实现:
Template模式是采用继承的方式实现:将逻辑算法放在抽象基类中,并实现好细节的接口,子类中实现细节;Template
模式实际上就是面向对象中多态的概念实现算法细节和高层接口的松耦合。
 
而策略设计模式解决的是和Template模式类似的问题,但是策略模式是讲逻辑算法封装在一个类中,采用组合的方式解决这个问题;
 
AbstractClass.h
#pragma
once
 
#include
<iostream>
using
namespace std;
 
class
AbstractClass
{
public:
    
AbstractClass(void);
    
virtual ~AbstractClass(void);
    
void TemplateMethod();
 
protected:
    
 virtual
void PrimitiveOperation1()=0;
    
 virtual
void PrimitiveOperation2()=0;
};
 
class
ConcreteClass1:public
AbstractClass
{
public:
    
ConcreteClass1(void);
    
virtual ~ConcreteClass1(void);
    

    
void PrimitiveOperation1();
    
void PrimitiveOperation2();
}
 
AbstractClass.cpp
#include
"StdAfx.h"
#include
"AbstractClass.h"
 
AbstractClass::AbstractClass(void)
{
}
 
AbstractClass::~AbstractClass(void)
{
}
 
void
AbstractClass::TemplateMethod()
{
    
this->PrimitiveOperation1();
    
this->PrimitiveOperation2();
}
 
ConcreteClass1::ConcreteClass1(void)
{
 
}
 
ConcreteClass1::~ConcreteClass1(void)
{
 
}
 
void
ConcreteClass1::PrimitiveOperation1()
{
    
cout<<"operation 1"<<endl;
}
 
void
ConcreteClass1::PrimitiveOperation2()
{
    
cout<<"operation 2"<<endl;
}
 
主函数:
//
 
#include
"stdafx.h"
 
#include
"AbstractClass.h"
 
int
_tmain(int
argc, _TCHAR*
argv[])
{
    
AbstractClass *p1=new
ConcreteClass1();
    
p1->TemplateMethod();
    
return 0;
}
 
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: