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;
}
相关推荐
w陆压12 小时前
2.区分C++中相似但不同的类型
c++·c++基础知识
十五年专注C++开发13 小时前
CMake进阶:vcpkg中OpenSSLConfig.cmake详解
c++·windows·cmake·openssl·跨平台编译
郑同学的笔记13 小时前
【Eigen教程02】深入Eigen矩阵引擎:模板参数、内存布局与基础操作指南
c++·线性代数·矩阵·eigen
wadesir13 小时前
C++基本数据类型详解(零基础掌握C++核心数据类型)
java·开发语言·c++
leiming615 小时前
c++ map容器
开发语言·c++·算法
杨校15 小时前
杨校老师课堂备赛C++信奥之模拟算法习题专项训练
开发语言·c++·算法
hd51cc16 小时前
MFC 文档/视图 二
c++·mfc
wzfj1234517 小时前
认识lambda
c++
老王熬夜敲代码17 小时前
C++万能类:any
开发语言·c++·笔记
智者知已应修善业17 小时前
【数组删除重复数据灵活算法可修改保留重复数量】2024-3-4
c语言·c++·经验分享·笔记·算法