TemplateMethod模式

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

UML结构图:


抽象基类:
1)AbstractClass:抽象基类,定义算法的轮廓

解析:
TemplateMethod 的关键在于在基类中定义了一个算法的轮廓,但是算法每一步具体的实现留给了派生类.但是这样也会造成设计的灵活性不高的缺点,因为轮廓已经定下来了要想改变就比较难了,这也是为什么优先采用聚合而不是继承的原因.

实现:

#ifndef TEMPLATEMETHOD_H_
#define TEMPLATEMETHOD_H_

class AbstractClass
{
public:

 AbstractClass(){}
 virtual~ AbstractClass(){}
 void TemplateMethod();

protected:

 virtual void PrimitiveOperation1() = 0;
 virtual void PrimitiveOperation2() = 0;
};


class ConcreateClass : public AbstractClass
{
public:

 ConcreateClass(){}
 virtual~ ConcreateClass(){}

protected:

 virtual void PrimitiveOperation1();
 virtual void PrimitiveOperation2();
};

#endif

 

#include "stdafx.h"
#include "TemplateMethod.h"
#include <iostream>

using namespace std;


void AbstractClass::TemplateMethod()
{
 PrimitiveOperation1();
 PrimitiveOperation2();
}


void ConcreateClass::PrimitiveOperation1()
{
 cout<<"ConcreateClass::PrimitiveOperation1"<<endl;
}

 

void ConcreateClass::PrimitiveOperation2()
{
 cout<<"ConcreateClass::PrimitiveOperation2"<<endl;

}

 


#include "stdafx.h"
#include "TemplateMethod.h"
#include <iostream>
#include <stdlib.h>

using namespace  std;


int _tmain(int argc, _TCHAR* argv[])
{
 AbstractClass* lpAbsClass = new ConcreateClass;
 lpAbsClass->TemplateMethod();
 delete lpAbsClass;
 lpAbsClass = NULL;

 system("pause");
 return 0;
}

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值