设计模式-模板方法模式 C++实现
来源:互联网 发布:ubuntu emuleweb 编辑:程序博客网 时间:2024/06/05 21:38
模板方法模式是基于继承的代码复用基本技术,模板方法模式的结构和用法也是面向对象设计的核心之一。在模板方法模式中,可以将相同的代码放在父类中,而将不同的方法实现放在不同的子类中。
在模板方法模式中,我们需要准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,然后声明一些抽象方法来让子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现,这就是模板方法模式的用意。模板方法模式体现了面向对象的诸多重要思想,是一种使用频率较高的模式。
1.模式定义
模板方法模式(Template Method Pattern)定义了一个算法的步骤,并允许子类别为一个或多个步骤提供其实践方式。让子类别在不改变算法架构的情况下,重新定义算法中的某些步骤。在软件工程中,它是一种软件设计模式,和C++模板没有关连。
2.模式结构
外观模式包含如下角色:
AbstractClass: 抽象类ConcreteClass:具体类
3.代码分析
AbstractClass.h
#pragma once#include <iostream>using namespace std;class AbstractClass{public: AbstractClass(); virtual ~AbstractClass(); void PrimitiveOperation1(); virtual void PrimitiveOperation2(); void TemplateMethod();};
AbstractClass.cpp
#include "AbstractClass.h"AbstractClass::AbstractClass(){}AbstractClass::~AbstractClass(){}void AbstractClass::PrimitiveOperation1(){ cout << "AbstractClass PrimitiveOperation1." << endl;};void AbstractClass::PrimitiveOperation2(){ cout << "AbstractClass PrimitiveOperation2." << endl;};void AbstractClass::TemplateMethod(){ PrimitiveOperation1(); PrimitiveOperation2(); cout << "Done the method." << endl;}
ConcreteClassA.h
#pragma once#include "AbstractClass.h"class ConcreteClassA : public AbstractClass{public: ConcreteClassA(); virtual ~ConcreteClassA(); virtual void PrimitiveOperation2();};
ConcreteClassA.cpp
#include "ConcreteClassA.h"ConcreteClassA::ConcreteClassA(){}ConcreteClassA::~ConcreteClassA(){}void ConcreteClassA::PrimitiveOperation2(){ cout << "ConcreteClassA PrimitiveOperation2." << endl;}
ConcreteClassB 同 ConcreteClassA。
测试代码:
int main(int argc, char *argv[]){ AbstractClass *concreteClassA = new ConcreteClassA(); concreteClassA->TemplateMethod(); AbstractClass *concreteClassB = new ConcreteClassB(); concreteClassB->TemplateMethod(); return 0;}
4.模式优点
模板方法模式的优点
模板方法模式通过把不变的行为搬移到超类,去除了子类中的重复代码。
子类实现算法的某些细节,有助于算法的扩展。
通过一个父类调用子类实现的操作,通过子类扩展增加新的行为,符合“开放-封闭原则”。
5.模式缺点
模板方法模式的缺点
每个不同的实现都需要定义一个子类,这会导致类的个数的增加,设计更加抽象。
6.总结
模板方法模式定义了算法的步骤,将这些步骤的实现延迟到了子类。
模板方法模式为我们提供了一种代码复用的重要技巧
。
模板方法模式的抽象类可以定义抽象方法、具体方法和钩子。
- 设计模式_模板方法模式(C++)
- 设计模式-模板方法模式 C++实现
- 设计模式C++实现--原型模式、模板方法模式
- 模板方法设计模式简单实现
- 设计模式:模板方法模式
- 设计模式 - 模板方法模式
- 设计模式:模板方法模式
- 设计模式 模板方法模式
- 设计模式--模板方法模式
- 设计模式-【模板方法模式】
- 设计模式: 模板方法模式
- 设计模式- 模板方法模式
- 设计模式 - 模板方法模式
- 设计模式 - 模板方法模式
- 设计模式-模板方法模式
- 设计模式-模板方法模式
- 设计模式---模板方法模式
- 设计模式-模板方法模式
- 邮递员送信(rms模拟3-4)* * (dijkstra)
- Mysql主从复制原理及配置
- python 爬取百度贴吧 帖子
- 反射学习
- Hive中日期函数总结
- 设计模式-模板方法模式 C++实现
- android OpenGL es图书和学习资料
- Linux 常用20条命令 Mark
- 【解决!!!】MyEclipse 2015 stable3.0 完美破解,解决启动闪退问题
- 剑指offer SQL训练
- 2017/9/16随笔--Jquery源码解读
- Javascript 事件,思维导图
- CCF CSP 201509-1 数列分段(Java-100分)
- HTML学习整理