c++策略模式

C++策略模式(Strategy Pattern) 意图 定义一系列的算法,把它们一个一个封装卡里,并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化。 动机 需要换行功能的客户程序如果直接包含换行算法代码的话讲会变得复杂,这使得客户程序庞大并且难以维护,尤其当其需要支持多种换行算法时问题会更加严重。 不同的时候需要不同的算法,我们不想支持我们并不使用的换行算法。 当换行功能时客户程序的一个难以分割的成分时,增加新的换行算法或改变现在算法将十分困难。 ... 阅读详情

本文通过运用设计模式比没用设计模式的优势在哪?

设计模式主要是要抓住稳定部分和易变部分,文章结尾会指出。

非策略模式
#include <iostream>
using namespace std;

//以上班乘坐的交通工具为例

//需要步行和乘公交车去上班
enum TYPE {
    WALK,
    TRANSIT
};
class GoWork {
public:
    void go(TYPE type) {
        if (type == WALK) {
            cout << "走路去上班" << endl;
        } else if (type == TRANSIT ){
            cout << "坐公交去上班" << endl;
        }
    }
};

//现在又增加了地铁的出行方式
enum TYPE2 {
    WALK2,
    TRANSIT2,
    SUBWAY2  //改动部分
};
class GoWork2 {
public:
    void go(TYPE2 type) {
        if (type == WALK2) {
            cout << "走路去上班" << endl;
        } else if (type == TRANSIT2) {
            cout << "坐公交去上班" << endl;
        } else if (type == SUBWAY2) {       //改动部分
            cout << "坐地铁去上班" << endl;
        }
    }
};


int main()
{
    GoWork().go(WALK);
    GoWork2().go(SUBWAY2);
    return 0;
}
策略模式
#include <iostream>
using namespace std;

//以上班乘坐的交通工具为例

//需要步行和乘公交车去上班
class Transport {
public:
    virtual void run() = 0;
    virtual ~Transport() {}
};

class Walk : public Transport {
public:
    void run() override { cout << "步行去上班" << endl; }
};

class Transit : public Transport {
public:
    void run() override { cout << "乘公交去上班" << endl; }
};

class GoWork {
public:
    void go(Transport *transport) {
        transport->run();
    }
};

//现在又增加了地铁的出行方式
class Subway : public Transport {
public:
    void run() override { cout << "乘地铁上班" << endl; }
};

int main()
{
    auto *walk = new Walk();
    GoWork().go(walk);
    delete(walk);
    auto *subway = new Subway();
    GoWork().go(subway);
    delete(subway);
    return 0;
}

策略模式要求:稳定部分:go函数。易变部分:run函数。

没有运用策略模式违背了开闭原则。

如果出现if...else if... else if...且不知道未来会不会增加,需要考虑策略模式。

类图:
在这里插入图片描述

设计模式C++实现(2)——策略模式 软件领域中的设计模式为开发人员提供了一种使用专家设计经验的有效途径。设计模式中运用了面向对象编程语言的重要特性:封装、继承、多态,真正领悟设计模式的精髓是可能一个漫长的过程,需要大量实践经验的积累。最近看设计模式的书,对于每个模式,用C++写了个小例子,加深一下理解。主要参考《大 阅读详情

相关推荐

C++ 策略模式

策略模式(Strategy Pattern)定义一系列算法,把它们一个个封装起来,并且使它们可以互相替换。Strategy 可以使算法独立于使用算法的客户端。

青春不老,奋斗不止! 8749

策略模式和工厂模式的区别

工厂模式和策略模式看着很像,经常让人混淆不清; 它们的区别在哪里,需要细细体味; 相似点 在模式结构上,两者很相似; 差异 用途不一样 工厂是创建型模式,它的作用就是创建对象; 策略是行为型模式,它的作用是让一个对象在许多行为中选择一种行为; 关注点不一样 一个关注对象创建 一个关注行为的封装 ...

weixin_30467087的博客 407

策略模式(Strategy Pattern)的完整C++实现源代码

策略模式是一种行为设计模式,它允许在运行时选择算法的行为。这种模式通过定义一系列算法类并将其封装在可互换的策略对象中,使得算法的选择和使用可以独立于客户端代码进行变化。在本文中,我们将使用C++语言来实现策略模式的完整源代码。通过使用策略模式,我们可以在运行时选择算法,而无需修改客户端代码。这种灵活性使得策略模式在许多应用场景中非常有用,特别是当有多个相似但具有不同行为的算法时。现在,我们将创建一个使用策略模式的上下文类(Context Class)。接下来,我们将实现具体的策略类。方法来执行策略的算法。

CodeSpark的博客 146

设计模式:(策略模式)

设计模式:(策略模式)

qq_51447436的博客 8892

Unity 实现动态网格地图生成与交互组件

本文详细介绍了在Unity中实现动态网格地图生成与交互组件的完整方案。从基础网格单元实现到高级交互功能,涵盖网格生成器核心逻辑、事件驱动架构、性能优化技巧以及六边形网格等特殊实现。特别适合游戏开发者学习如何构建战棋、模拟经营类游戏的可交互地图系统,提升开发效率与用户体验。

weixin_29015483的博客 1068

Diffix3D+复现

上下载模型,将其放在一个目录中,并将目录名填在demo代码中from_pretrained的cache_dir参数里。目录结构应该是"<PATH>/nvidia/difix/…给的requirements文件中pytorch和xformers的版本没有指定,这里测试过以下版本,可以成功运行。将readme中的demo代码新建一个python脚本复制进去,然后将脚本放在src目录中运行。如果遇到网络问题无法加载huggingface上的预训练模型,可以手动从。如果出现,以下错误重新。

NeverMakeIt的博客 1085

C++ 设计模式-策略模式

策略模式的介绍和使用

wangdamingll的博客 2569

Palantir的Ontology:从静态知识图谱到动态业务引擎的跃迁

本文探讨了Palantir的Ontology技术如何将静态知识图谱升级为动态业务引擎。通过引入函数和行动作为核心元素,Ontology实现了业务逻辑的自动化响应与执行,显著提升物流、能源等领域的运营效率。文章详细解析了其混合存储引擎、状态监听网络等关键技术设计,并对比展示了传统架构与Ontology架构的业务价值差异。

weixin_42570296的博客 200

突破编程_C++_设计模式(策略模式)

C++ 设计模式:策略模式

突破编程 2891

ArchLinux下用Wine运行钉钉全攻略:从字体配置到中文输入法避坑

本文详细介绍了在ArchLinux系统上使用Wine运行钉钉的完整配置流程。从最新的WoW64架构环境准备、中文字体配置与DPI优化,到钉钉安装、关键系统库替换,再到解决中文输入法失效等核心难题,提供了实战避坑指南。旨在帮助Linux用户在企业办公场景下,获得接近原生的稳定使用体验。

alice7model的博客 588

[ENVI]-[高光谱遥感]-波谱沙漏分析工具的使用

图1-2-1查看特殊波段的坏波段图1-2-2在中添加坏波段ENVI波谱沙漏分析工具MNF变换。

m0_57992372的博客 1469

C++ 设计模式——策略模式

引入"策略“设计模式的定义:定义一些列算法类(策略类),将每个算法封装起来,让他们可以互相替换。换句话说,策略模式通常把一系列算法封装到一系列具体策略类中作为抽象策略类的字类,然后根据实际需要适用这些字类。

慢慢记录,慢慢更新。 2726

Tartancalib标定OAK-FFC_4p(上)

1.使用Tartancalib标定双目或多目相机前,先对单个相机标定获得内参,再获得外参。

qq_51731421的博客 1277

C++设计模式——策略模式(Strategy Pattern)

C++设计模式——策略模式(Strategy Pattern) 微信公众号:幼儿园的学霸 目录 文章目录C++设计模式——策略模式(Strategy Pattern)目录定义实现示例传统的策略模式实现使用函数指针实现策略模式工厂模式和策略模式对比总结参考资料 定义 Define a family of algorithms,encapsulate each one,and make them interchangeable. 定义一组算法,将每个算法都封装起来,并且使它们之间可以互换 策略模式是指定

leonardohaig的博客 4771

Apache-Plc4x-Modbus-Tcp学习记录(一)

Apache-Plc4x-Modbus-Tcp学习记录(一)

weixin_45325423的博客 6988

老 MacBook 部署 OpenClaw:比 Windows 更稳定

老款 MacBook 在运行 OpenClaw 时,Linux 系统相比 Windows 系统具有更好的稳定性和性能。本文将从多个维度对比 Linux 和 Windows 在老款 MacBook 上运行 OpenClaw 的表现,帮助您选择更合适的操作系统。

一键难忘的博客 2096

C++设计模式——策略模式(strategy pattern)

一、原理讲解 1.1意图 定义算法簇,将这些算法封装起来,之间可以相互替换。这样的好处在于,使得算法可以独立于使用它的客户而变化。 1.2与模板方法区别 模板方法主要是继承接口类,而策略模式主要是组合接口类,两种方法核心区别在于,是继承?还是组合? 设计模式八大原则之一:优先使用对象组合,而不是类继承。 1.3设计步骤 a1 先定义一个接口类最为抽象基类ABC a2 定义一系列算法...

净无邪博客 1275

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

【c++设计模式22】行为模式7:策略模式(Strategy Pattern)

原创作者:郑同学的笔记原创地址:https://zhengjunxue.blog.youkuaiyun.com/article/details/132920283qq技术交流群:921273910# 一、定义策略模式是一种行为型设计模式,它定义了一系列算法,并将每个算法封装起来,使它们可以相互替换。客户端代码在运行时选择所需的算法。

junxuezheng的博客 2042

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

C++实现策略模式Strategy Pattern

策略模式定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。

优快云er_2015的博客 613

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

设计模式 策略模式(Strategy Pattern) C++表达

策略模式(Strategy Pattern)是一种行为设计模式,它的核心思想是将一系列相关的算法或行为封装到独立的策略类中,并使得这些策略可以相互替换。主要用来定义一系列可互换的算法或行为。它允许在运行时选择和切换这些算法或行为,而不用修改使用它们的代码。策略模式就像给的代码提供了一组不同的工具,每个工具都可以完成相似的工作(例如不同的送货方式)。可以根据需要随时更换这些工具,而不需要修改太多代码。

二分掌柜的 1141

《Head First 设计模式》C++实现【策略模式(Strategy Pattern)】

《Head First 设计模式》书中第2章——策略模式(Strategy Pattern)的C++代码实现。 策略模式(Strategy Pattern):定义了算法簇,分别封装起来,让他们之间可以相互替换,此模式让算法的变化独立于使用算法的客户。

Liber-coder的博客 321

c++ 策略模式

一、定义: 策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。 1.1 角色: 抽象策略角色(Strategy): 抽象策略类。 具体策略角色(ConcreteStrategy):封装了继续相关的算法和行为。 环境角色(Context):持有一个策略类的引用,最终给客户端调用。 1.2 UML图: 二、示例 2.1 项目结构 2.2 .h .cpp文件 myStrategy.h 注:里面的具体策略角色,可以单独写成一个类文件。

qq_40754866的博客 2958

C++函数式策略模式中配置修改

在从面向过程.到面向对象,再到函数式策略模式的转变和精进时,敲的代码编译运行不了,不支持多文件编译,分析定位后是之前的相关json 配置导致,修改如下: 2.settings.json 编译配置是否正确,特别是编译器路径和C++标准。之前的代码修复中使用了C++14的特性,比如std::make_unique,这是C++14引入的,而tasks.json中指定的是-std=c++11,这会导致编译错误,因为C++11不支持std::make_unique。这是一个关键问题,需要用户将C++标准升

qq_42217078的博客 820

cpp的策略模式

// // main.cpp // strategyPartner // // Created by bikang on 16/11/17. // Copyright (c) 2016年 bikang. All rights reserved. //#include <iostream> using namespace std;class StrategyCd{ public: vi

逐梦如风-毕康 810

C++ 设计模式:策略模式(Strategy Pattern)

C++ 设计模式:策略模式(Strategy Pattern)

冀晓武的博客 1006
上一篇: c++模板方法
下一篇: c++观察者模式
waxtear
博客等级 码龄9年 6粉丝 34原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值