← 返回博客列表

模式特点

定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。策略模式使算法可独立于使用它的客户端而变化。

类图

类图

应用场景

示例代码(C++)

// 策略接口 - 运动规划
class MotionStrategy {
public: virtual void move(double x, double y, double z) = 0;
          virtual ~MotionStrategy() = default; };

// 关节运动
class JointMove : public MotionStrategy {
public: void move(double x, double y, double z) override {
    std::cout << "关节运动到(" << x << "," << y << "," << z << ")" << std::endl; }};

// 直线运动
class LinearMove : public MotionStrategy {
public: void move(double x, double y, double z) override {
    std::cout << "直线运动到(" << x << "," << y << "," << z << ")" << std::endl; }};

// 圆弧运动
class CircularMove : public MotionStrategy {
public: void move(double x, double y, double z) override {
    std::cout << "圆弧运动到(" << x << "," << y << "," << z << ")" << std::endl; }};

// 上下文
class Robot {
    MotionStrategy* m_strategy;
public:
    void setStrategy(MotionStrategy* s) { m_strategy = s; }
    void moveTo(double x, double y, double z) { m_strategy->move(x, y, z); }
};

Robot robot;
robot.setStrategy(new JointMove());   robot.moveTo(100, 200, 50);
robot.setStrategy(new LinearMove()); robot.moveTo(100, 200, 50);  // 运行时切换