博客
关于我
设计模式之模板模式
阅读量:358 次
发布时间:2019-03-04

本文共 1597 字,大约阅读时间需要 5 分钟。

模板方法模式(Template Method Pattern)

概念

模板方法模式是一种行为模式,它通过将特定算法中的某些必要步骤委托给抽象方法,并通过子类继承对抽象方法的不同实现来改变整个算法的行为。这种模式的核心思想是将算法的公共部分封装在抽象类中,而具体的实现细节由子类来决定。

应用场景

模板方法模式通常适用于以下情况:

  • 统一操作步骤:系统中存在多个应用场景,但这些场景共享相同的操作步骤。
  • 多样化操作细节:各个子类在实现相同的操作步骤时,可能有不同的细节处理方式。
  • 代码复用:避免重复代码,通过继承和多态来实现不同行为的复用。

总结

模板方法模式的优势在于:

  • 将算法的公共部分集中在抽象类中统一管理。
  • 子类可以通过实现抽象方法来灵活扩展算法的行为。
  • 实现了对有行为变化的对象的解耦,有助于系统的扩展和维护。

角色和职责

  • AbstractClass:提供一个抽象类,包含所有算法的公共步骤。
  • ConcreteClass:继承自抽象类,并实现抽象方法中的具体步骤。
  • templateMethod():抽象方法,定义一个算法的骨架。
  • method1() & method2():具体步骤方法,实现算法的不同部分。

案例

以汽车组装为例,假设我们有一个抽象类MakeCar,其子类MakeBusMakeJeep分别实现不同的组装步骤。

#include 
using namespace std;class MakeCar {public: virtual void makeHead() = 0; virtual void makeBody() = 0; virtual void makeTail() = 0; void make() { makeHead(); makeBody(); makeTail(); }};class MakeBus : public MakeCar {public: void makeHead() { cout << "bus 组装 车头" << endl; } void makeBody() { cout << "bus 组装 车身" << endl; } void makeTail() { cout << "bus 组装 车尾" << endl; }};class MakeJeep : public MakeCar {public: void makeHead() { cout << "Jeep 组装 车头" << endl; } void makeBody() { cout << "Jeep 组装 车身" << endl; } void makeTail() { cout << "Jeep 组装 车尾" << endl; }};int main() { MakeCar *bus = new MakeBus; bus->make(); MakeCar *jeep = new MakeJeep; jeep->make(); delete bus; delete jeep; cout << "hello..." << endl; return 0;}

在这个案例中,MakeCar类定义了一个通用的make()方法,子类MakeBusMakeJeep分别实现了makeHead()makeBody()makeTail()方法。通过模板方法模式,我们可以在不修改MakeCar类的情况下,扩展不同的组装逻辑,从而实现代码的灵活复用和扩展。

转载地址:http://taur.baihongyu.com/

你可能感兴趣的文章
poj2828(线段树查找序列第k小的值)
查看>>
POJ2891:Strange Way to Express Integers——题解
查看>>
poj3045 Cow Acrobats(二分最大化最小值)
查看>>
poj3061 Subsequence(尺取法)
查看>>
poj3074 DLX精确覆盖
查看>>
poj3252(组合数)
查看>>
Qt笔记——QToolBox开发简易QQ聊天界面
查看>>
poj3307
查看>>
Qt笔记——QString与隐式共享、MVC架构
查看>>
Qt笔记——QSemaphore处理生产者/消费者模式
查看>>
Qt笔记——QMutex&QWaitCondition处理生产者消费者模式
查看>>
Qt笔记——QLable+QPixmap图片缩放踩坑
查看>>
Qt笔记——foreach与forever
查看>>
QT程序怎么挪到Linux下,linux+Qt程序如何打包发布
查看>>
Qt知识:视图框架QGraphicsWidget详解
查看>>
SpringBoot中项目启动及定时任务缓存数据库常用数据至内存变量并转换后高频调用
查看>>
Qt知识: 画刷风格
查看>>
QT的OpenGL渲染窗QOpenGLWidget Class
查看>>
QT的C++程序加载动态链接库DLL(Linux下是so)的方式
查看>>
QT界面操作1:如何跟踪鼠标位置?
查看>>