c++之策略模式

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

策略模式是行为型模式,它是一种定义一系列算法的方法,所有的这些算法完成的都是相同的工作,只是实现不同。所以可以用相同的方式去调用所有的算法,降低了算法类与使用算法的类之间的耦合度。

代码:

#include <iostream>

using namespace std;

/*
	策略模式
*/

//抽象算法
class ConnectDevice
{
public:
	virtual void connect() = 0;
};

//tcp连接
class TcpConnect :public ConnectDevice
{
public:
	virtual void connect()
	{
		cout << "Tcp连接" << endl;
	}
};

//RS232连接
class RsConnect :public ConnectDevice
{
public:
	virtual void connect()
	{
		cout << "rs232连接" << endl;
	}
};

//串口连接
class UartConnect :public ConnectDevice
{
public:
	virtual void connect()
	{
		cout << "串口连接" << endl; 
	}
};

//维护具体算法
class ContextConnect{
public:
	void ContextConnectFun(ConnectDevice *con)
	{
		if (con)
		{
			con->connect();
		}
	}
};

//客户端
int main()
{

	ContextConnect *context = new ContextConnect;
	if (context)
	{
		//由实例化不同的策略,调用不同的算法
		ConnectDevice *con = nullptr;
		con = new TcpConnect();
		context->ContextConnectFun(con);

		con = new RsConnect();
		context->ContextConnectFun(con);

		con = new UartConnect();
		context->ContextConnectFun(con);

		delete context;
		context = nullptr;
		if (con)
		{
			delete con;
			con = nullptr;
		}
	}

	return 0;
}

 

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

相关推荐

C++ 策略模式

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

青春不老,奋斗不止! 8746

【C++设计模式】策略模式

背景 策略模式(Strategy模式)是行为模式之一,它对一系列的算法加以封装,为所有算法定义一个抽象的算法接口,并通过继承该抽象算法接口对所有的算法加以封装和实现,具体的算法(策略)选择交由客户端决定。Strategy模式主要用来平滑地处理算法的切换 。 策略模式的UML类图如下,主要的类有三个: 1.抽象策略类Strategy,定义所有支持的算法的公共接口; 2.具体策略类StrategyA,StrategyB,封装具体的算法; 3.上下文Constext类,根据策略类的配置,通过多态实现不同算法的调用

weixin_45403888的博客 1401

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

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

CodeSpark的博客 146

C++ 策略模式调用不同的排序算法

前些天学过策略模式,最近重温了几种常用的简单排序算法,想到了策略模式,就实际操练一下。 Sort.h #pragma once #include&amp;amp;amp;lt;iostream&amp;amp;amp;gt; using namespace std; class Sort { public: virtual void sortSeq(int a[], int n) = 0; }; class BobbleSort :publ...

weixin_42333471的博客 977

机器人系统能用MQTT5.0代替ROS2吗?

更为灵活和友好的方案是通过把ROS(Robot Operating System)与MQTT(Message Queuing Telemetry Transport)协议相结合的解决方案,利用MQTT的轻量级、跨平台和广泛适用性特点,扩展ROS系统的通信能力,或将非ROS系统接入ROS网络。

QzmAIoT 2161

cutlass2.x源码解读之PitchLinearStripminedThreadMap

TensorCoord:使用layout::PitchLinearCoord作为张量坐标。Shape:使用模板参数Shape_作为tile的形状,kThreads:线程总数,定义为模板参数Threads。kElementsPerAccess:每次访问的元素数,定义为模板参数ElementsPerAccess。ThreadAccessShape:线程访问的形状,使用layout::PitchLinearShape定义。内部实现细节:ShapeVec。

jiangjkd的专栏 787

C++设计模式——观察者模式(Observer Pattern)

C++设计模式——观察者模式(Observer Pattern) 微信公众号:幼儿园的学霸 目录 文章目录C++设计模式——观察者模式(Observer Pattern)目录前言定义代码示例总结观察者模式和中介模式优缺点适用场景及应用示例参考资料 前言 观察者模式面向的需求是:A对象(观察者)对B对象(被观察者)的某种变化高度敏感,需要在B变化的一瞬间做出反应。举个例子,新闻里喜闻乐见的警察抓小偷,警察需要在小偷伸手作案的时候实施抓捕。在这个例子里,警察是观察者、小偷是被观察者,警察需要时刻盯着小偷的一

leonardohaig的博客 1万+

DFT知识点扫盲——DFT scan chain

实际在项目中synccell一般直接上ULVT,既然是SDF,就是带Scan接口的DFF,SN (set negtive)是低置位,RP(reset positive)是高复位,既没有SN也没有RP的就是无复位寄存器。1:定义:满足可测试性设计(DFT),将设计中所有的触发器连接到一条或者若干条链上,称为scan chain,将一个复杂的时序电路转换为简单的组合电路进行测试,这一步是在逻辑综合(DC)中实现。当SE=1当SI=1时,电路进入scan状态,当SI=0时,电路工作在normal状态。

笨蛋大乌龟的博客 4933

设计模式之策略模式(C++实现)

策略模式其实是很简单并且很好用的一个模式。在开发中,我们经常碰到一个功能,可以使用不同的算法去实现它,我们要根据不同的情况去调用对应的算法,策略模式就是定义一系列算法,并且把它们封装起来,并且使它们相互可替换。其实这个模式就和多态的思想很相近。 例如,我们去旅游可以使用不同的策略:走路,跑步,飞。。。我们可以根据自己的情况去使用相对应的策略。 /************************

q5512049的博客 445

永磁同步电机ADRC控制策略优化:从理论到Simulink仿真实践

本文深入探讨了永磁同步电机自抗扰控制(ADRC)策略的优化与实践。针对传统PID在动态响应、抗扰及噪声抑制方面的不足,详细解析了ADRC三大核心组件——跟踪微分器(TD)、扩张状态观测器(ESO)与非线性状态误差反馈(NLSEF)的工作原理。通过手把手的Simulink仿真教程,展示了从算法编写、模型搭建到参数整定的完整流程,并进阶实现了位置-速度双环ADRC协同控制,为高性能电机伺服系统设计提供了从理论到实践的清晰指南。

root9的博客 412

多径衰落信道的 MATLAB 仿真

在无线通信系统中,信号在传输过程中会经历多径传播现象,导致信号在接收端出现时域和频域上的扩展。通过以上示例代码,我们可以进行多径衰落信道的 MATLAB 仿真。同时,我们还可以通过调整信道参数和信号特性,进一步研究多径衰落对系统性能的影响。常用的模型之一是瑞利衰落信道模型,它假设信号在传输过程中受到多个散射路径的影响。除了瑞利衰落信道模型,我们还可以使用其他类型的信道模型,如高斯衰落信道模型。在上述代码中,我们首先定义了信道的参数,包括最大多普勒频移、多径延迟和多径功率衰落。函数来模拟高斯衰落信道。

TechCraze的博客 665

设计模式回顾——策略模式(C++)

策略模式(Strategy Pattern),指的是定义一系列算法,并将这些算法封装到具有公共接口的一系列策略类中,使得它们可以动态自由切换。

只要思想不滑坡,想法总比问题多。 1207

100天精通Python(可视化篇)——第109天:Pyecharts绘制各种常用地图(参数说明+代码实战)

100天精通Python(可视化篇)——第109天:Pyecharts绘制各种常用地图(参数说明+代码实战)

努力让自己发光,对的人才能迎着光而来 8万+

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

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

leonardohaig的博客 4769

【ODX介绍】-4.2-UDS诊断$27服务在ODX-D诊断描述文件中如何描述

共25页精讲:附ODX-D XML:UDS $27 Security服务0x61和0x62 Sub-Function,其它Sub-Function可参照其格式。 目录 1 ODX-D描述一个UDS $27 Security服务Sub-Function的结构 2 标签DIAG-SERVICE描述的内容 2.1 举例:DIAG-SERVICE的XML描述 3 标签REQUEST描述的内容 3.1 举例:REQUEST的XML描述 4 标签POS-RESPONSE描述的内容 4.1 举例:PO..

「汽车电子助手」的博客 1121

TIBCO Jaspersoft Studio报表开发 使用教程-进阶版

本文学习内容容器定制二级目录三级目录 容器定制 二级目录 三级目录

吉哲的博客 7520

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

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

净无邪博客 1274

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

c++策略模式

headfirst上的例子,学习之余练习总结一下。 策略模式:定义了算法族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。 把行为想成是“一族算法”,代表鸭子能做的事情。 代码: Duck.h #pragma once #include <iostream> using namespace std; class Behavior { }; class...

qq_40386321的博客 243

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

C++实现策略模式Strategy Pattern

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

优快云er_2015的博客 613

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

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

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

junxuezheng的博客 2042

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

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

二分掌柜的 1141

c++ 策略模式

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

qq_40754866的博客 2958

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

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

Liber-coder的博客 321

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++主题——策略模式

C++主题——策略模式       与模板方法模式类似,策略模式也是对一些算法的调度,只不过这些算法是同类型算法,而不像模板方法模式那样是一些不同类型算法的一种顺序上的调度。模板方法像是围棋中的布局阶段,策略模式更像是接下来的实战。针对不同的事情应用不同的策略完成相同的结果,这是策略。        模板方法模式定义了一个算法的骨架,把实现交给派生类具体实现,用户不必知道怎么实现,因为他已

深红 4605
上一篇: c++之抽象工厂模式
下一篇: 面向对象设计的七大原则
Qt上位机开发
Qt上位机开发 领域专家: C/C++技术领域 领域专家: C/C++技术领域
博客等级 码龄9年 9664粉丝 178原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值