设计模式之模板方法模式(C++)
来源:互联网 发布:ros ip 绑定mac 编辑:程序博客网 时间:2024/06/06 21:03
模板方法:定义一个操作中的算法骨架,而将一些步骤延迟到子类中实现。模板方法使得子类可以再不改变一个算法的结构即可重新定义该算法的某些特定步骤。通过把不变的行为搬移到基类中,去除了子类的重复代码,提供了一个很好的代码复用解决方案。
通用模板方法的UML类图
模板方法是将原来不变的行为和可变的行为剥离开,将不变的行为剥离到基类中,由基类提供一个模板方法,模板方法设置了算法的骨架,而各家的各个实现步骤和细节由各个子类具体实现。
抽象类AbstractClass 提供了一个模板方法定义算法骨架,声明了2个抽象方法为算法的具体实现细节,该抽象方法由各自的子类实现。
具体的类ConcreteClass 实现抽象方法,完成算法的具体步骤细节实现。
下面是通过的模板方法代码:
Template.h
class AbstractClass{public:virtual void PrimitiveOperation1()=0;virtual void PrimitiveOperation2()=0;void TemplateMethod();virtual ~AbstractClass(){}};class ConcreteClass1 :public AbstractClass{public:virtual void PrimitiveOperation1();virtual void PrimitiveOperation2();~ConcreteClass1(){}};class ConcreteClass2 :public AbstractClass{public:virtual void PrimitiveOperation1();virtual void PrimitiveOperation2();~ConcreteClass2(){}};
Template.cpp
#include "Template.h"#include <iostream>void AbstractClass::TemplateMethod(){//模板方法定义算法的骨架PrimitiveOperation1();PrimitiveOperation2();}void ConcreteClass1::PrimitiveOperation1(){std::cout << "算法步骤1" << std::endl;}void ConcreteClass1::PrimitiveOperation2(){std::cout << "算法步骤2" << std::endl;}void ConcreteClass2::PrimitiveOperation1(){std::cout << "组成部分1" << std::endl;}void ConcreteClass2::PrimitiveOperation2(){std::cout << "组成部分2" << std::endl;}
客户端代码:
#include "Template.h"int main(){AbstractClass *AC1 = new ConcreteClass1();AC1->TemplateMethod();AbstractClass *AC2 = new ConcreteClass2();AC2->TemplateMethod();delete AC1;delete AC2;}
程序运行结果:
0 0
- 设计模式之模板方法模式(C++)
- 设计模式_模板方法模式(C++)
- 设计模式之模板方法模式模板方法模式
- 设计模式之模板方法
- 设计模式之模板方法
- 设计模式之模板方法
- 设计模式之模板方法
- 设计模式之模板方法
- 设计模式之模板方法
- 设计模式之模板方法
- 设计模式之模板方法
- 设计模式之模板方法
- 设计模式之模板方法
- 设计模式之模板方法
- 设计模式之模板方法
- 设计模式之模板方法
- 设计模式之模板方法
- 设计模式之模板方法
- 整数中1出现的次数
- AOPR安装后全是英文咋搞
- live555编译移植
- 矩阵快速幂——Fibonacci ( POJ 3070 )
- mysql 数据类型
- 设计模式之模板方法模式(C++)
- Swift - 操作表(UIActionSheel)的用法,也叫底部警告框
- dump on ubuntu
- This application is modifying the autolayout engine from a background thread, which can lead t
- 从NSURLConnection到NSURLSession
- 五大开源Web代理服务器的横向点评
- 临时文件
- iOS原生录音功能
- php --- 数据接口方法