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;
}
相关推荐
Kel8 小时前
Node.js 单线程高并发:从内核中断到 JS 回调的完整技术栈
设计模式·架构·node.js
来一碗刘肉面9 小时前
队列的链式实现
数据结构·c++·算法·链表
naturerun9 小时前
逐步插入回路法构造欧拉回路的算法
c++·算法
LJHclasstore_luo11 小时前
【C++题解】112354.平行时空
数据结构·c++·算法
YYYing.11 小时前
【C++大型项目之高性能服务器框架 (九) 】协议抽象与Http服务器模块
服务器·c++·http·高性能·c/c++·后端框架
ch0sen1pm12 小时前
不太懂 atomic?我花了一下午从 freelist 写到 CAS 无锁栈
c++
红豆诗人13 小时前
C++ string 和 vector 基础:从常用接口到模拟实现
c++·stl
良木生香13 小时前
【C++初阶】STL—— Stack & Queue 从入门到精通:容器适配器、迭代器与经典面试题
java·开发语言·c++·算法·zookeeper
小小晓.13 小时前
C++小白记:vector
开发语言·c++·算法
脱胎换骨-军哥13 小时前
C++ 嵌入式编程实例:从寄存器操作到底层驱动开发
开发语言·c++·驱动开发