《策略模式(极简c++)》

本文章属于专栏- 概述 - 《设计模式(极简c++版)》-CSDN博客


本章简要说明适配器模式。本文分为**++模式说明、本质思想、实践建议、代码示例++**四个部分。

模式说明

  • 方案:策略模式是一种行为设计模式,它定义了一系列算法,将每个算法封装起来,并使它们可以相互替换,使得算法可以独立于使用它的客户端而变化。
  • 优点:
    • 灵活性:客户端可以根据需要选择不同的算法。
    • 可维护性:算法的变化不会影响到客户端的实现,易于扩展和维护。
  • 缺点:
    • 客户端必须了解所有的策略类:客户端需要知道所有可用的策略类,可能增加了耦合度

本质思想:策略模式通过将算法封装成独立的策略类,使得这些算法可以相互替换,客户端可以根据需求选择不同的策略。

实践建议:如果算法模块是一个团队开发的,让算法团队提供统一接口,以减少服务端和策略部分耦合。如果算法模块是多个团队开发,应该是服务端同学根据多个算法模块的语意,使用策略模式,让算法模块易于使用。

代码示例:

cpp 复制代码
#include <iostream>

// 策略接口
class FlyBehavior {
public:
    virtual void fly() = 0;
};

// 具体策略:飞行行为1
class FlyWithWings : public FlyBehavior {
public:
    void fly() override {
        std::cout << "I'm flying with wings!" << std::endl;
    }
};

// 具体策略:飞行行为2
class FlyNoWay : public FlyBehavior {
public:
    void fly() override {
        std::cout << "I can't fly!" << std::endl;
    }
};

// 策略模式的上下文,即使用策略的类
class Bird {
protected:
    FlyBehavior *flyBehavior;

public:
    void setFlyBehavior(FlyBehavior *fb) {
        flyBehavior = fb;
    }

    virtual void performFly() {
        flyBehavior->fly();
    }
};

// 具体的鸟类
class Sparrow : public Bird {
public:
    Sparrow() {
        // 默认使用飞行行为1
        flyBehavior = new FlyWithWings();
    }
};

int main() {
    Sparrow sparrow;
    sparrow.performFly(); // 输出:I'm flying with wings!

    FlyNoWay fnw;
    sparrow.setFlyBehavior(&fnw);
    sparrow.performFly(); // 输出:I can't fly!

    return 0;
}
相关推荐
Q741_1471 小时前
C++ 位运算 高频面试考点 力扣 面试题 17.19. 消失的两个数字 题解 每日一题
c++·算法·leetcode·面试·位运算
原则猫1 小时前
单例模式工程运用
前端·设计模式
初圣魔门首席弟子1 小时前
C++ STL string(字符串)学习笔记
c++·笔记·学习
AA陈超2 小时前
虚幻引擎5 GAS开发俯视角RPG游戏 P04-12 可缩放浮点数的曲线表
c++·游戏·ue5·游戏引擎·虚幻
旭意2 小时前
C++微基础备战蓝桥杯之数组篇10.1
开发语言·c++·蓝桥杯
青草地溪水旁3 小时前
VSCode C/C++ 构建任务配置文件 `tasks.json` 全字段深度解析
c语言·c++·vscode
爱和冰阔落5 小时前
C++模板进阶 非类型模板参数 模板的特化 分离编译的深入探索
c++·面试·编译原理·模板
charlie11451419111 小时前
精读C++20设计模式:行为型设计模式:中介者模式
c++·学习·设计模式·c++20·中介者模式
楼田莉子11 小时前
Qt开发学习——QtCreator深度介绍/程序运行/开发规范/对象树
开发语言·前端·c++·qt·学习
oioihoii11 小时前
超越 std::unique_ptr:探讨自定义删除器的真正力量
c++