C++ 设计模式之策略模式

策略模式允许你定义一系列算法,将每个算法封装起来,并使它们可以互换。以下是一个简单的 C++ 策略模式的示例,假设我们有一个图形绘制类,可以选择不同的绘制策略:

cpp 复制代码
#include <iostream>

// 抽象策略类
class DrawingStrategy {
public:
    virtual void draw() = 0;
    virtual ~DrawingStrategy() {}
};

// 具体策略类A
class DrawCircle : public DrawingStrategy {
public:
    void draw() override {
        std::cout << "Draw a circle." << std::endl;
    }
};

// 具体策略类B
class DrawRectangle : public DrawingStrategy {
public:
    void draw() override {
        std::cout << "Draw a rectangle." << std::endl;
    }
};

// 上下文类,用于执行策略
class DrawingContext {
private:
    DrawingStrategy* strategy;

public:
    DrawingContext(DrawingStrategy* initialStrategy) : strategy(initialStrategy) {}

    void setStrategy(DrawingStrategy* newStrategy) {
        strategy = newStrategy;
    }

    void executeDraw() {
        strategy->draw();
    }
};

int main() {
    // 创建具体策略对象
    DrawCircle circleStrategy;
    DrawRectangle rectangleStrategy;

    // 创建上下文对象,并设置初始策略
    DrawingContext context(&circleStrategy);

    // 执行绘制操作
    context.executeDraw();

    // 更换策略
    context.setStrategy(&rectangleStrategy);

    // 再次执行绘制操作
    context.executeDraw();

    return 0;
}
相关推荐
superman超哥33 分钟前
仓颉GC调优参数深度解析
c语言·开发语言·c++·python·仓颉
誰能久伴不乏34 分钟前
Linux `epoll` 学习笔记:从原理到正确写法(含 ET 经典坑总结)
linux·服务器·网络·c++·ubuntu
(❁´◡`❁)Jimmy(❁´◡`❁)41 分钟前
【算法】 二分图理论知识和判断方法
c++·算法
im_AMBER1 小时前
Leetcode 85 【滑动窗口(不定长)】最多 K 个重复元素的最长子数组
c++·笔记·学习·算法·leetcode·哈希算法
leiming61 小时前
c++ string 容器
开发语言·c++·算法
superman超哥2 小时前
仓颉Option类型的空安全处理深度解析
c语言·开发语言·c++·python·仓颉
你好音视频2 小时前
FFmpeg FLV解码器原理深度解析
c++·ffmpeg·音视频
吃喝不愁霸王餐APP开发者2 小时前
基于策略模式动态选择不同地区霸王餐API接口的路由实现
策略模式
报错小能手2 小时前
C++ STL bitset 位图
开发语言·c++
橘子真甜~2 小时前
Reids命令原理与应用1 - Redis命令与原理
数据库·c++·redis·缓存