石家庄网站建设seo,网站好玩代码和特效,微信小程序费用有哪些,wordpress直播播放器链接#xff1a;C 设计模式 链接#xff1a;C 设计模式 - 模板方法 链接#xff1a;C 设计模式 - 观察者模式
策略模式#xff08;Strategy Pattern#xff09;是一种行为设计模式#xff0c;它定义了一系列算法#xff0c;并将每个算法封装起来#xff0c;使它们可以…链接C 设计模式 链接C 设计模式 - 模板方法 链接C 设计模式 - 观察者模式
策略模式Strategy Pattern是一种行为设计模式它定义了一系列算法并将每个算法封装起来使它们可以相互替换。策略模式使得算法可以独立于使用它的客户端而变化。
1.问题分析
在开发中经常会遇到需要在运行时选择不同算法或行为的情况。如果将这些算法直接嵌入到客户端代码中会导致代码复杂且难以维护。策略模式通过将算法封装成独立的类并通过接口进行调用使得算法可以灵活地替换和扩展。
2.实现步骤
定义策略接口定义一个接口所有具体策略类都实现这个接口。实现具体策略类每个具体策略类实现策略接口提供具体的算法实现。上下文类上下文类持有一个策略对象的引用并通过策略接口调用具体的算法。
3.代码示例
以机器人的清洁任务作为示例。
3.1.策略接口
// 定义机器人任务的公共接口
class CleaningStrategy {public:virtual ~CleaningStrategy() default;virtual void clean() 0;
};3.2.具体策略类
// 策略1直线清洁
class LinearCleaningStrategy : public CleaningStrategy {public:void clean() override { std::cout Cleaning in a straight line. std::endl; }
};// 策略2螺旋清洁
class SpiralCleaningStrategy : public CleaningStrategy {public:void clean() override { std::cout Cleaning in a spiral pattern. std::endl; }
};3.3.上下文类
// 维护一个对策略对象的引用
class CleaningRobot {public:void setStrategy(std::shared_ptrCleaningStrategy strategy) { this-strategy strategy; }void performCleaning() {if (strategy) {strategy-clean();} else {std::cout No cleaning strategy set. std::endl;}}private:std::shared_ptrCleaningStrategy strategy;
};3.4.调用算法
int main() {// 创建一个清洁机器人对象CleaningRobot robot;// 设置直线清洁策略std::shared_ptrCleaningStrategy linearStrategy std::make_sharedLinearCleaningStrategy();robot.setStrategy(linearStrategy);robot.performCleaning();// 设置螺旋清洁策略std::shared_ptrCleaningStrategy spiralStrategy std::make_sharedSpiralCleaningStrategy();robot.setStrategy(spiralStrategy);robot.performCleaning();return 0;
}