有什么设计网站推荐,个人免费建站的网站,链接搜索引擎,安徽省建设工程链接#xff1a;C 设计模式 链接#xff1a;C 设计模式 - 策略模式 链接#xff1a;C 设计模式 - 观察者模式
模板方法#xff08;Template Method#xff09;是一种行为设计模式#xff0c;它定义了一个操作中的算法的骨架#xff0c;而将一些步骤延迟到子类中。通过这…链接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;
}模板方法模式是通过继承的方式将算法的骨架定义在抽象类中而具体步骤由子类实现。适用于算法步骤固定但某些步骤需要定制的场景。