C++ 设计模式:模板方法(Template Method)
链接:C++ 设计模式
链接:C++ 设计模式 - 策略模式
链接:C++ 设计模式 - 观察者模式
模板方法(Template Method)是一种行为设计模式,它定义了一个操作中的算法的骨架,而将一些步骤延迟到子类中。通过这种方式,子类可以在不改变算法结构的情况下重新定义算法中的某些步骤。
1.问题分析
在开发中,经常会遇到一些操作,它们的整体步骤是固定的,但其中某些步骤的实现是可变的。模板方法通过将这些可变的步骤抽象出来,使得子类可以灵活地实现这些步骤,而不需要修改整体的算法结构。
2.实现步骤
- 定义抽象基类:在抽象基类中定义算法的骨架,并将可变的步骤声明为纯虚函数。
- 实现具体子类:在具体子类中实现这些可变的步骤。
- 调用算法:通过基类接口调用算法,具体的实现由子类提供。
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;
}
模板方法模式是通过继承的方式,将算法的骨架定义在抽象类中,而具体步骤由子类实现。适用于算法步骤固定,但某些步骤需要定制的场景。