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;
}
相关推荐
Minecraft红客12 小时前
C++制作迷宫第一版
c++·游戏·电脑·娱乐
雪域迷影12 小时前
Windows11中VS2026使用C++ 现代化json库nlohmann的3种方式
开发语言·c++·json
羑悻的小杀马特12 小时前
LRU Cache:高频访问数据的“智能保鲜舱”与经典淘汰艺术
c++·后端·lru cache·热点数据与冷数据
zephyr0512 小时前
C++ STL string 用法详解与示例
开发语言·c++
郝学胜-神的一滴12 小时前
Linux线程的共享资源与非共享资源详解
linux·服务器·开发语言·c++·程序人生·设计模式
郝学胜-神的一滴12 小时前
Linux进程与线程的区别:从内存三级映射角度深入解析
linux·服务器·c++·程序人生
默凉12 小时前
c++使用http发送图像
开发语言·c++·http
不爱吃糖的程序媛12 小时前
OpenHarmony PC 第三方 C/C++ 库适配完整指南
c语言·c++·harmonyos
雪域迷影12 小时前
nlohmann::json库对象和json结构体转换的新方式
c++·json·nlohmann_json库
浔川python社12 小时前
C++小程序编写系列(2)
c++·算法·图论