当前位置: 首页 > news >正文

C++ 设计模式:模板方法(Template Method)

链接:C++ 设计模式
链接:C++ 设计模式 - 策略模式
链接:C++ 设计模式 - 观察者模式

模板方法(Template Method)是一种行为设计模式,它定义了一个操作中的算法的骨架,而将一些步骤延迟到子类中。通过这种方式,子类可以在不改变算法结构的情况下重新定义算法中的某些步骤。

1.问题分析

在开发中,经常会遇到一些操作,它们的整体步骤是固定的,但其中某些步骤的实现是可变的。模板方法通过将这些可变的步骤抽象出来,使得子类可以灵活地实现这些步骤,而不需要修改整体的算法结构。

2.实现步骤

  1. 定义抽象基类:在抽象基类中定义算法的骨架,并将可变的步骤声明为纯虚函数。
  2. 实现具体子类:在具体子类中实现这些可变的步骤。
  3. 调用算法:通过基类接口调用算法,具体的实现由子类提供。

3.代码示例

以机器人任务作为示例

3.1.抽象基类

class Robot {public:virtual ~Robot() = default;void performTask() {start();doTask();stop();}protected:void start() { std::cout << "Starting the robot" << std::endl; }void stop() { std::cout << "Stopping the robot" << std::endl; }// 抽象步骤,由子类实现virtual void doTask() = 0;
};

3.2.具体子类

// 具体机器人1,清扫机器人
class CleaningRobot : public Robot {protected:void doTask() override { std::cout << "Cleaning the floor" << std::endl; }
};
// 具体机器人2,巡逻机器人
class PatrollingRobot : public Robot {protected:void doTask() override { std::cout << "Patrolling the area" << std::endl; }
};

3.3.调用算法

int main() {CleaningRobot cleaningRobot;PatrollingRobot patrollingRobot;std::cout << "Cleaning robot task..." << std::endl;cleaningRobot.performTask();std::cout << "\nPatrolling robot task..." << std::endl;patrollingRobot.performTask();return 0;
}

模板方法模式是通过继承的方式,将算法的骨架定义在抽象类中,而具体步骤由子类实现。适用于算法步骤固定,但某些步骤需要定制的场景。

http://www.lryc.cn/news/512605.html

相关文章:

  • GDPU Vue前端框架开发 跨年大礼包
  • 搭建一个高效且安全的APP分发平台
  • Leetcode打卡:二叉树中的链表
  • 大数据技术-Hadoop(四)Yarn的介绍与使用
  • 算法 class 004(选择,冒泡,插入)
  • linux---awk命令详细教程
  • 一个通用的居于 OAuth2的API集成方案
  • STM32配合可编程加密芯片SMEC88ST的防抄板加密方案设计
  • QML学习(五) 做出第一个简单的应用程序
  • 深入解析Android Framework中的android.location包:架构设计、设计模式与系统定制
  • 【C++11】类型分类、引用折叠、完美转发
  • mongodb(6.0.15)安装注意事项,重装系统后数据恢复
  • union的实际使用
  • EKF 自动匹配维度 MATLAB代码
  • Oracle复合索引规则指南
  • JS - Array Api
  • 【JS】for-in 和 for-of遍历对象的区别
  • 【每日学点鸿蒙知识】ets匿名类、获取控件坐标、Web显示iframe标签、软键盘导致上移、改变Text的背景色
  • 深度学习blog- 数学基础(全是数学)
  • 最后100米配送
  • Linux的进程替换以及基础IO
  • 《计算机网络A》单选题-复习题库
  • 闲谭Scala(2)--安装与环境配置
  • Python基于卷积神经网络的车牌识别系统开发与实现
  • Spring Boot集成Netty创建一个TCP服务器,接收16进制数据(自定义解码器和编码器)
  • Python 中的 with open:文件操作的最佳实践
  • 哪些框架、软件、中间件使用了netty? 哪些中间件、软件底层使用了epoll?
  • AI 智能助手对话系统
  • 2024年秋词法分析作业(满分25分)
  • Docker镜像瘦身:从1.43G到22.4MB