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

你可能感兴趣的文章
python redis连接,在Python中使用Redis连接池的正确方法
查看>>
python regex_Python RegEx
查看>>
python requests post 中文结果请求得到unicode
查看>>
Python Requests接口自动化测试实战
查看>>
Python requests模块
查看>>
python request与grequests该如何选择
查看>>
python request模块
查看>>
Python requirements.txt的使用方法
查看>>
Python REST(Web 服务)框架的推荐?
查看>>
Python rsa 加密
查看>>
Python RSA操作
查看>>
Python轻松实现统计学中重要的相关性分析
查看>>
Python scrapy 常见问题及解决 【遇到的坑】
查看>>
Python Seborn热图数据的动态更新
查看>>
Python Seborn绘制空白直方图
查看>>
Python Selenium - 获取href值
查看>>
Python Selenium实现自动化测试及Chrome驱动使用!
查看>>
Python Selenium搭建UI自动化测试框架
查看>>
Python Selenium模块详解
查看>>
Python selenium爬取影评生成词云图
查看>>