当前位置: 首页 > news >正文

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

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


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

模式说明

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

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

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

代码示例

#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() {// 默认使用飞行行为1flyBehavior = 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;
}

http://www.lryc.cn/news/336608.html

相关文章:

  • Python向文件里写入数据
  • 【网站项目】校园订餐小程序
  • vue-指令v-for
  • Python项目1 外星人入侵_外星人
  • 导入项目运行后,报错java: Cannot find JDK ‘XX‘ for module ‘XX‘
  • JS rgb,hex颜色值转换
  • Linux| Awk 中“next”命令奇用
  • 基于Springboot的箱包存储系统(有报告)。Javaee项目,springboot项目。
  • JavaScript_语法--变量
  • P1843 奶牛晒衣服
  • 功能强大:JMeter 常用插件全解析
  • vulhub之fastjson篇-1.2.27-rce
  • 基于springboot实现教师工作量管理系统项目【项目源码+论文说明】计算机毕业设计
  • [StartingPoint][Tier1]Crocodile
  • 【Qt】:常用控件(四:显示类控件)
  • gradio简单搭建——关键词简单筛选【2024-4-11优化】
  • docker完美安装分布式任务调度平台XXL-JOB
  • java使用while循环输出2-100的所有素数
  • VSCode中调试C++程序
  • Can Transformer and GNN Help Each Other?
  • 在隐私计算应用中和数链具备哪些技术特点?
  • 【智能家居入门4】(FreeRTOS、MQTT服务器、MQTT协议、微信小程序)
  • 爬取豆瓣(线程、Session)优化版本
  • 拷贝控制总结
  • 无重复字符串的最长子串
  • javaScript Object.hasOwn()的用法
  • MINI2440 开发板 给他干出来了
  • 上海人工智能实验室的书生·浦语大模型学习笔记(第二期第三课——上篇)
  • 前端小白的学习之路(Vue2 三)
  • ChatGPT 之优势与缺陷