博客
关于我
设计模式之模板模式
阅读量: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/

你可能感兴趣的文章
PyInstaller图标选项在Mac上不起作用
查看>>
pyinstaller的使用
查看>>
pyinstaller超级加密 (加壳和转c)
查看>>
pyinstaller错误:OSError:找不到Python库:libpython3.4mu.so.1.0、libpython3.4m.so.1.0、libpython3.4.so.1.0
查看>>
Pyinstaller:‘;Fiona‘;没有属性‘;_loading‘;(很可能是由于循环导入)
查看>>
pyinstaller:更改应用程序图标
查看>>
Pylint“未解决的导入“;Visual Studio 代码中的错误
查看>>
pyLoad远程代码执行漏洞复现(CVE-2023-0297)
查看>>
pymongo update_one(),upsert=True,不使用$运算符
查看>>
pymongo 中的快速或批量更新
查看>>
pymongo删除操作
查看>>
PyMongo按多个关键点分组
查看>>
Pympress:强大的双屏PDF阅读器
查看>>
pymysql.err.InternalError: (1054, "Unknown column '27D24A3B' in 'where clause'")之错误解决
查看>>
pymysql.err.OperationalError: (1364, “Field ‘id‘ doesn‘t have a default value“)
查看>>
Pytorch Tensor 维度操作的形象理解 Tensor.unsqueeze() Tensor.squeeze()
查看>>
PyMySQL库对Mysql数据库进行增删改查与工具类封装
查看>>
pynput的基本介绍和使用
查看>>
pyodbc 通过 IIS7 连接到 MSSQL 2005 服务器
查看>>
PyPI 存储库中的 JarkaStealer:深入解析与防范措施
查看>>