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

发布于:2025-02-11 ⋅ 阅读:(24) ⋅ 点赞:(0)

链接: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;
}

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


网站公告

今日签到

点亮在社区的每一天
去签到