链接: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;
}
模板方法模式是通过继承的方式,将算法的骨架定义在抽象类中,而具体步骤由子类实现。适用于算法步骤固定,但某些步骤需要定制的场景。