设计模式之一——策略模式及实现

设计模式C++实现(2)——策略模式 软件领域中的设计模式为开发人员提供了一种使用专家设计经验的有效途径。设计模式中运用了面向对象编程语言的重要特性:封装、继承、多态,真正领悟设计模式的精髓是可能一个漫长的过程,需要大量实践经验的积累。最近看设计模式的书,对于每个模式,用C++写了个小例子,加深一下理解。主要参考《大 阅读详情
策略模式,又叫算法簇模式,就是定义了不同的算法族,并且之间可以互相替换,此模式让算法的变化独立于使用算法的客户。

策略模式的好处在于你可以动态的改变对象的行为。
设计原则是把一个类中经常改变或者将来可能改变的部分提取出来,作为一个接口(c++z中可以用虚类),然后在类中包含这个对象的实例,这样类的实例在运行时就可以随意调用实现了这个接口的类的行为。下面是一个例子。


/*
这是一个表现僧人和道士的程序,僧人光头,使用棍子做武器,道士长小胡子,使用拂尘作武器
*/
package strategy;


//处理长相接口
interface LooksBehavier
{
public void display();
}

//处理所使用的武器接口
interface WeaponBehavier
{
public void useWeapon();
}
//角色基类
class Role {
public int heght; //身高
public int sex; //性别
public WeaponBehavier weapon; //处理武器接口的实例
public LooksBehavier looks; //处理长相的接口的实例
public void display() //显示长相
{
looks.display();
}
public void weapon() //设置所使用的武器
{
weapon.useWeapon();
}
}

//道士长相类,实现了长相接口
class TaoistBehavier implements LooksBehavier
{
public void display() //实现接口函数
{
System.out.println("I'm a taolist with long white goatee");
}

}

//和尚长相类,实现了长相接口
class BonzeBehavier implements LooksBehavier
{
public void display() //实现接口函数
{
System.out.println("I'm a Bonze with no hair");
}

}

//道士武器类,实现了处理武器接口
class TaoistWeapon implements WeaponBehavier
{
public void useWeapon() //实现了处理武器接口函数
{
System.out.println("My weapon is horsetail whisk");;
}
}

//和尚武器类,实现了处理武器接口
class BonzeWeapon implements WeaponBehavier
{
public void useWeapon() //实现了处理武器接口函数
{
System.out.println("My weapon is truncheon");;
}
}

//道士
class Taoist extends Role
{
public Taoist()
{
looks = new TaoistBehavier();
weapon = new TaoistWeapon();
}
}

//和尚
class Bonze extends Role
{
public Bonze()
{
looks = new BonzeBehavier();
weapon = new BonzeWeapon();
}
public void changeWeapon()
{
weapon = new TaoistWeapon();
System.out.println("change weapon");
}
}
public class RoleBase{
public static void main(String [] arg)
{
Taoist taoistObj = new Taoist();
Bonze bonzeObj = new Bonze();
taoistObj.display();
taoistObj.weapon();
bonzeObj.display();
bonzeObj.weapon();
bonzeObj.changeWeapon(); //改变和尚使用的武器
bonzeObj.weapon();
}
}

成功执行后的输出为:
I'm a taolist with long white goatee
My weapon is horsetail whisk
I'm a Bonze with no hair
My weapon is truncheon
change weapon
My weapon is horsetail whisk
 
大话设计模式策略模式c++实现 策略模式 其他二十三种设计模式 #include<iostream> using namespace std; //策略模式(Strategy):定义算法家族,分别封装起来,让算法之间可以相互替换,且不会影响到使用算法的Client客户 //抽象收费策略 class CashSuper { public: virtual double acceptCash(double money) = 0; }; //正常收费类 class CashNormal :public CashSuper { 阅读详情

相关推荐

实战解析:从Innovus到Calibre的LVS错误排查全流程

本文详细解析了从Innovus到Calibre的LVS错误排查全流程,涵盖物理验证关键步骤与工具链协同。通过实战案例分享,重点解决器件不匹配、连接性错误等常见问题,并提供GDS导出规范、网表修正策略等实用技巧,帮助工程师高效完成芯片设计物理验证。

9o8p7i6u5y的博客 1038

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

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

Liber-coder的博客 321

别再手动算重量了!用C++给UG/NX写个自动计算零件质量与质心的插件(附完整源码)

本文详细介绍了如何使用C++为UG/NX开发智能质量分析插件,实现零件质量与质心的自动计算。通过结合NXOpen和UF_MODL API,设计高效的数据结构和批量处理机制,大幅提升机械设计效率。文章包含完整源码和实用技巧,帮助工程师告别手动计算,适用于复杂装配体的自动化工程计算。

weixin_30247307的博客 136

【23种设计模式】之策略模式(Strategy Pattern) .Net Core实现

在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。 在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对象的执行算法。

欢迎指错||纠正||建议||水评+点赞&&评论&&关注&&转发 888

嵌入式GUI显示驱动配置实战:从emWin硬件接口到SPI屏驱动优化

在嵌入式系统开发中,显示驱动是连接GUI库与物理屏幕的核心底层模块,其本质是CPU与显示控制器之间的数据“翻译”与“传输”系统。其工作原理是通过实现特定的硬件抽象层接口,将GUI生成的图形数据转换为屏幕能识别的时序和协议。这项技术的核心价值在于,它允许开发者在资源受限的MCU上,通过适配不同的硬件接口,以最小的硬件开销实现稳定的图形输出。其典型应用场景包括智能家居面板、工业HMI、可穿戴设备等嵌入式图形界面开发。本文将深入解析emWin GUI库的驱动框架,重点探讨如何针对SPI、I2C等串行接口进行高效的

weixin_29159711的博客 343

深度学习CV八股文

深度学习CV八股文一、深度学习中解决过拟合方法L1和L2正则化DropoutDropout正则化Inverted Dropout(反向随机失活)Dropout起到正则化效果的原因:Dropout的缺点eargstopping ( 早停法 )二、深度学习中解决欠拟合方法三、梯度消失和梯度爆炸解决梯度消失的方法解决梯度爆炸的方法四、神经网络权重初始化方法Xavier指数加权移动平均数五、梯度下降法梯度下降SGD(随机梯度下降法)Momentum(动量梯度下降)Nesterov Momentum自适应学习率算法A

填坑 2万+

Java实现常用设计模式之策略模式

意图:定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。主要解决:在有多种算法相似的情况下,使用 if…else 所带来的复杂和难以维护。何时使用:一个系统有许多许多类,而区分它们的只是他们直接的行为。如何解决:将这些算法封装成一个一个的类,任意地替换。关键代码:实现同一个接口。应用实例: 1、诸葛亮的锦囊妙计,每一个锦囊就是一个策略。2、旅行的出游方式,选择骑自行车、坐汽车,每一种旅行方式都是一个策略。3、JAVA AWT 中的 LayoutManager。优点: 1、算法可以自由切换。

xtho62的博客 847

STM32 使用IO口模拟I2C时序

上一篇《I2C协议详解》 我们了解了I2C的操作流程,这一篇,我们就使用I2C,来对EEPROM进行操作吧。 我们做两种选择: 1.时序由IO口模拟高低电平,需要了解协议并按照协议操作相应的IO口。 2.时序由硬件自行产生,不需要人工干预; 由硬件产生的I2C时序,我们借助Stm32Cube配置实现便可,我们这一篇,抛开Stm32Cube,手撕代码,根据I2C的时序,一步步地实现I2C对...

8937

【设计模式】设计模式C++编程实现之策略模式(Strategy Pattern)

在介绍具体的设计模式之前,先介绍一下OO(Objected-Oreinted)基础以及OO原则。 OO基础:抽象、封面装、多态、继承。OO原则: 封装变化。多用组合,少用继承。针对接口编程,不针对实现编程。 策略模式定义: 定义了算法族,分别封装起来,让他们之间可以相互替换,此模式让算法的变化独立于使用算法的客户。 一个很重要的设计原则是: 找出

计算机专业同学的充电站。 2479

MATLAB - 浮动基座机器人的逆运动学

本例演示如何解决以浮动底座为模型的机器人的逆运动学问题。浮动底座机器人可以在空间中自由平移和旋转,具有六个自由度。浮动基座机器人的逆运动学问题适用于空间应用,即使用安装在浮动和致动基座上的机械臂在空间操纵物体,也适用于躯干和腿部可在空间自由移动的行走机器人。请注意,刚体树对象表示具有固定基体的刚体树。这意味着刚体树的基体在世界中具有固定的位置和方向。您可以在基体上附加一个 “浮动 ”类型的刚体关节,为具有浮动基体的机器人建模,以用于动态模拟等某些应用。

机器人控制与仿真应用 2441

058、时域降噪(Temporal Denoise):运动补偿与递归滤波在视频降噪中的应用

本文深入探讨了时域降噪(Temporal Denoise)技术在视频处理中的应用。作者通过车载环视项目案例,揭示了空域降噪的局限性,提出利用帧间信息进行降噪的核心思路。文章详细解析了递归滤波和运动补偿两大关键技术,指出递归滤波简单但易产生拖影,而运动补偿通过计算运动矢量解决此问题。作者还分享了多帧降噪方案的优势与算力挑战,并总结了噪声模型匹配、运动矢量一致性等实战调优经验。最后强调时域降噪需要与空域降噪平衡,指出调试工具的重要性,提出"在保证运动区域无鬼影的前提下追求信噪比"的实践原则,体现了算法复杂度与效

zzfmlxs的博客 93

Python实现设计模式-策略模式

通过策略模式,我们实现了将不同的策略封装成了独立的类,并通过上下文类来执行具体的策略。在策略模式中,算法或策略被封装在单独的策略类中,这些策略类实现了相同的接口或继承自相同的抽象类。在策略模式中,我们首先将每个具体的策略封装成独立的类,每个类都实现了相同的接口或继承自相同的抽象类。由于每个具体的策略都实现了相同的接口或继承自相同的抽象类,上下文类可以在运行时动态选择不同的策略对象,从而实现策略的切换。总结起来,策略模式是将算法或策略封装成独立的类,实现了算法和客户端的解耦,提高了代码的灵活性和可维护性。

captain 1466

Autosar代码包初识 2 - 如何编译Vector包内Demo工程

Vetcor autosar代码包Demo工程编译,GreenHills,RH850,Autosar,Davinci COnfigurator

weixin_42412049的博客 5186

《大话设计模式》c++实现 之策略模式

一、UML图 二、概念 策略模式:他定义了算法家族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户。 三、优点 (1)策略模式是一种定义一系列算法的方法,从概念上来看,所有这些算法完成的都是相同的工作,只是实现不同,他可以以相同的方式调用所有的算法,减少了各种算法类与使用算法类之间的耦合。 (2)策略模式的Strate...

anqiu4023的博客 221

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

AspectJ实现设计模式(二)——策略模式

      本文将继续介绍使用AspectJ实现设计模式之策略模式,文章以一个图书折扣例子的形式描述了策略模式AspectJ版本的参考实现。      策略模式把行为和环境分割开来。环境类负责维持和查询行为类,各种算法则由具体的策略类实现。由于算法和环境独立开来,算法的增减,修改都不会影响环境和客户端。策略模式的简易UML图例如下而使用AspectJ实现的策略模式UML图与之有很大的区

starchu1981的专栏 1364

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

设计模式之策略模式(python实现)

最近在读《深入浅出设计模式》这一本书,收获颇多,打算写一个系列的blog,并用python实现其中的每一个设计模式,以加深理解。              下面将要介绍的就是书中的第一个设计模式:策略模式 书中以模拟鸭子应用问题作为实例,一款游戏应用中要求有各种各样的鸭子。        先用继承来实现了这一个应用,其设计如下:         这个设计主要是以Du

huangkangying的专栏 8997

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

设计模式——策略模式原理及代码实现

一、简介 策略模式(Strategy):它定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户。 用接口或抽象类封装算法,具体的实现方式由子类来实现。使用对象引用接口、抽象类的对象,具体的实现由实现类决定,后面的子类的更换,也不会对使用类有影响。 二、结构图 三、代码实现 1. Strategy,算法封装类 public interface Strategy { void method(); } 2. ConcreteStrategy

张先生和他的金毛的博客 363

浅谈设计模式之策略模式

策略模式 在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。 在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对象的执行算法。 介绍 意图:定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。 主要解决:在有多种算法相似的情况...

Devil_May_Cry1995的博客 199

【设计模式】 策略模式介绍及C代码实现

策略模式(Strategy Pattern)是一种常用的面向对象设计模式,它定义了一系列可互相替换的算法或策略,并将每个算法封装成独立的对象,使得它们可以在运行时动态地替换。具体来说,策略模式定义了一系列算法,每个算法都封装在一个具体的策略类中,这些策略类实现了相同的接口或抽象类。在使用算法的时候,客户端通过一个上下文对象来调用策略类的方法,从而完成算法的执行。这样,客户端可以在运行时动态地选择不同的策略类,从而实现不同的行为。

物联网布道师 1427

java 策略模式会员_设计模式——策略模式:会员价格体系的简单实现

前言 上面这张图是京东商城的会员体系,总共包含五种不同等级的会员,分别是注册会员,铜牌会员,银牌会员,黄金会员,钻石会员。从上图可以看出,不同等级会员享有不同的优惠服务,那么这么多优惠服务在程序中是怎么实现的呢?最直接了当的方式,就是写一堆if else去做判断,这显然不是最佳实现方式,很不利于后期维护。实际上这里需要用到设计模式中的策略模式,针对不同等级的会员,每一种会员特权都拒用不同的优惠策略...

weixin_42353187的博客 696

设计模式学习笔记——策略模式

在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。 在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对象的执行算法。 介绍 意图:定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。 主要解决:在有多种算法相似的情况下,使用 i...

Stephen 265

设计模式实现CPP——策略模式

1、动态切换算法:客户端通过 setStrategy 方法动态更换策略。2、解耦策略与使用:上下文类不依赖具体策略的实现,只依赖接口。3、扩展性:新增策略只需添加新的 TravelStrategy 子类,无需修改现有代码。4、内存管理:示例中使用原始指针简化逻辑,实际项目中建议使用智能指针(如 std::unique_ptr)。

qq_45835091的博客 370

Java设计模式-策略模式的实现_java实现策略模式

1 如果在一个系统里面有许多类,它们之间的区别仅在于它们的行为,那么使用策略模式可以动态的让一个对象在许多行为中选择一种行为2 如果系统需要动态地在几种算法中选择一种。那么这些算法可以包装到一个个必看视频!获取2024年最新Java开发全套学习资料 备注Java的具体算法类里面,而这些算法类都是一个抽象算法类的子类3 一个系统的算法使用的数据不可以让客户端知道。策略模式可以避免让客户端涉及到不必要接触到的复发的和只与算法有关的数据定义抽象角色类 (定义好各个实现的共同抽象方法)

2301_82243799的博客 437

详解C++设计模式编程中策略模式的优缺点及实现

转自:https://www.jb51.net/article/80677.htm 策略模式(Strategy):它定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法的变化不会影响到使用算法的客户。策略模式和 Template 模式要解决的问题是相同(类似)的,都是为了给业务逻辑(算法)具体实现和抽象接口之间的解耦。策略模式将逻辑(算法)封装到一个类(Contex...

斧冰 696

设计模式之策略模式(php实现)

github地址:https://github.com/ZQCard/design_pattern   /** * 在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。 * 在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对象...

diaoliu7156的博客 198

java设计模式之策略模式的优雅实现

前言 策略模式是开发中常用的一种设计模式,主要解决在有多种算法相似的情况下,使用 if...else 所带来的复杂和难以维护的问题。看了网上很多关于策略模式的上下文切换类实现都不甚优雅,故而想总结分享一篇自我感觉比较优雅的处理方式,方便大家一起学习。 方式一:使用@PostConstruct初始化到map中 该方式是比较常用的,相对比较优雅,能满足动态获取不同实现类的功能。废话不多说直接上代...

zhaojun20161206的博客 7489
上一篇: 修改mysql最大连接数
下一篇: 淘宝面试
zhsp1029
博客等级 码龄21年 115粉丝 89原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值