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

 

意图:

定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。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;

}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值