TemplateMethod模板方法模式
来源:互联网 发布:微云 mac 不能同步 编辑:程序博客网 时间:2024/05/17 08:42
Template模板方法模式
作用:定义一个操作中的算法的骨架。而将一些步骤延迟到子类中,模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
其关键是将通用算法(逻辑)封装在抽象基类中,并将不同的算法细节放到子类中实现。
UML图如下:
AbstractClass是抽象类,其实也就是一个抽象模板,定义并实现了一个模板方法。这个模板方法一般是一个具体方法,它给出了一个顶层逻辑的骨架,而逻辑的组成步骤在相应的抽象操作中,推迟到之类实现。顶层逻辑也有可能调用一些具体方法。
ConcreteClass,实现父类所定义的一个或多个抽象方法。每一个AbstractClass都可以有任意多个ConcreteClass与之对应,而每一ConcreteClass都可以给出这些抽象方法(也就是顶级逻辑的组成步骤)的不同实现,从而使得顶级逻辑的实现各不相同。
特点:
模板方法模式是通过把不变行为搬移到基类,去除之类中的重复代码来体现它的优势。
当不变的和可变的行为在方法的子类实现中混合在一起的时候,不变的行为就会在子类中重复出现。通过模板方法模式把这些行为搬移到单一的地方,这样就帮助子类摆脱重复的不变行为的纠缠。
代码如下:
TemplateMethod.h
#ifndef _TEMPLATEMETHOD_H_#define _TEMPLATEMETHOD_H_//抽象模板,并定义了一个模板方法。class AbstractClass{public: ~AbstractClass(); //具体的模板方法,给出了逻辑的骨架,而逻辑的组成是一些相应的抽象操作,它们都推迟到子类中实现 void TemplateMethod(); //一些抽象行为,放到子类中去实现 virtual void PrimitiveOperation1()=0; virtual void PrimitiveOperation2()=0;protected: AbstractClass();private:};//实现基类所定义的抽象方法class ConcreteClassA : public AbstractClass{public: ConcreteClassA(); ~ConcreteClassA(); //实现基类定义的抽象行为 virtual void PrimitiveOperation1(); virtual void PrimitiveOperation2();private:};//实现基类所定义的抽象方法class ConcreteClassB : public AbstractClass{public: ConcreteClassB(); ~ConcreteClassB(); //实现基类定义的抽象行为 virtual void PrimitiveOperation1(); virtual void PrimitiveOperation2();private:};#endifTemplateMethod.cpp
#include "TemplateMethod.h"#include <iostream>using namespace std;AbstractClass::AbstractClass(){}AbstractClass::~AbstractClass(){}void AbstractClass::TemplateMethod(){ this->PrimitiveOperation1(); this->PrimitiveOperation2();}ConcreteClassA::ConcreteClassA(){}ConcreteClassA::~ConcreteClassA(){}void ConcreteClassA::PrimitiveOperation1(){ cout << "ConcreteClassA::PrimitiveOperation1" << endl;}void ConcreteClassA::PrimitiveOperation2(){ cout << "ConcreteClassA::PrimitiveOperation2" << endl;}ConcreteClassB::ConcreteClassB(){}ConcreteClassB::~ConcreteClassB(){}void ConcreteClassB::PrimitiveOperation1(){ cout << "ConcreteClassB::PrimitiveOperation1" << endl;}void ConcreteClassB::PrimitiveOperation2(){ cout << "ConcreteClassB::PrimitiveOperation2" << endl;}
main.cpp
#include "TemplateMethod.h"int main(){ //ConcreteClassA与ConcreteClassB可相互替换 AbstractClass* pAbstract = new ConcreteClassA(); pAbstract->TemplateMethod(); pAbstract = new ConcreteClassB(); pAbstract->TemplateMethod(); return 0;}
- TemplateMethod模板方法模式
- TemplateMethod模板方法模式
- 模板方法模式(TemplateMethod)
- TemplateMethod 模板方法模式
- TemplateMethod(模板方法模式)
- 模板方法模式(TemplateMethod)
- 模板方法模式(TemplateMethod)
- 模板方法模式(TemplateMethod) 简介
- 模板方法模式(TemplateMethod)
- 15.TemplateMethod-模板方法模式
- 15.TemplateMethod-模板方法模式
- 设计模式 -- 模板方法模式 TemplateMethod
- C++设计模式-TemplateMethod模板方法模式
- 设计模式之模板方法模式(TemplateMethod)
- C++设计模式-TemplateMethod模板方法模式
- 设计模式 模板方法模式 TemplateMethod
- TemplateMethod模板方法模式之应用
- Java 实现模板方法(TemplateMethod)模式
- 大数据量,海量数据 处理方法总结
- 一些有关web.xml的错误的解决
- 离线使用Google的Gmail、日历、文档已经成为现实。
- oracle 高版本将数据导入低版本(乌托邦的村长)
- 亲情在前面幸福就在后面
- TemplateMethod模板方法模式
- Linux操作系统性能监测:内存篇(ZZ)
- python网络编程:Python 网络编程介绍说明
- 下下周开始将不断的推出关于"雷电WIWI"玛雅后科技 的知识内容,敬请期待!
- 内核移植之Part1
- stm32 flash 零星领悟
- linq to xml详解
- Intel/Nokia 你们本应沉住气的
- 使用 Python 进行 socket 编程