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

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

模板方法模式(Template Method Pattern)

概念

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

应用场景

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

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

总结

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

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

角色和职责

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

案例

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

#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()方法,子类MakeBus和MakeJeep分别实现了makeHead()、makeBody()和makeTail()方法。通过模板方法模式,我们可以在不修改MakeCar类的情况下,扩展不同的组装逻辑,从而实现代码的灵活复用和扩展。

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

你可能感兴趣的文章
python利用pytorch库导出图像分割算子
查看>>
python利用pyshark监听网卡来抓包其中pyshark中摸索的一些可用参数
查看>>
python利用excel分析过杀漏失
查看>>
python判断汉字数目
查看>>
python判断文件是空的,如果是空的,就删除
查看>>
python判断密码是否正确_python密码判断是否符合要求的方法
查看>>
python判断字符串包含中文_Python 判断字符串是否包含中文
查看>>
python删除第一行_Python 乱码指北:一行删掉根目录
查看>>
Python删除列表元素的三种方法
查看>>
python初步学习-python数据类型-集合(set)
查看>>
python列表生成字典_Python中将字典转换为列表的方法
查看>>
python列表对应元素合并为列表及判断一个列表是几维
查看>>
python列表去重复后按照顺序_从包含不可共元素的Python列表中删除重复元素,同时保留顺序?...
查看>>
python列表前几个_python之列表
查看>>
python列表元组
查看>>
Python列表/元组/字典和集合使用
查看>>
python列表 行列选择_python_pandas_dataframe_行列选择_切片操作
查看>>
python列表
查看>>
python列出当前目录、子目录和文件的脚本
查看>>
python+flask计算机毕业设计骨科门诊患者档案管理系统(程序+开题+论文)
查看>>