策略模式(Strategy)实例分析与讲解

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

 

       面向对象的编程中经常会用到设计模式,而其中的策略模式(Strategy)使用算是最频繁的模式之一,策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。下面将用一个简单的小实例来谈谈策略模式(Strategy)是怎么实现的。

      两个int类型的整数可有多重操作方式,例如相加、相减、相乘等,我们可以写出这些算法的实现并且封装起来,以备在需要的时候选择我们想要的实现,从而满足我们的程序设计要求,首先,定义一个接口:

 

package com.dylan.model.pattern.strategy;

public interface ICalculate {

	// 定义计算两个int数的方法,具体实现都不一样,可以实现两个int的相加、相减、相乘、相除等
	public int calculateInt(int a, int b);
}

       在这个接口的基础上,我写了三种实现,如下:

其一,加法算法时候的实现,

 

package com.dylan.model.pattern.strategy;

public class AddCalculate implements ICalculate {

	//接口ICalculate的加法算法的实现
	@Override
	public int calculateInt(int a, int b) {
		return a+b;
	}
}

其二,减法算法的实现

package com.dylan.model.pattern.strategy;

public class SubtractCalculate implements ICalculate {

	// 接口ICalculate的减法算法实现
	@Override
	public int calculateInt(int a, int b) {
		return a - b;
	}
} 

其三,乘法算法的实现

package com.dylan.model.pattern.strategy;

public class MultiplyCalculate implements ICalculate {

	// 接口ICalculate的乘法实现
	@Override
	public int calculateInt(int a, int b) {

		return a * b;
	}
} 

       如下就要写一个我们使用的环境了,下面给出了一个定义操作两个int整数的类,这个类中很重要的一个属性就是ICalculate,它是一个接口类型,因为我们对接口做了不同的实现,所以我们才能实现我们的目的,不同的需求使用不同的算法。   

 

package com.dylan.model.pattern.strategy;

public class Int2Operate {

	private ICalculate iCalculate;

	public ICalculate getiCalculate() {
		return iCalculate;
	}

	public void setiCalculate(ICalculate iCalculate) {
		this.iCalculate = iCalculate;
	}

	// 定义个初始化的方法,参数为ICalculate类型的,然后通过传递参数进来以实现策略模式,
	// 这里也提现了多态的应用,接口有不同的实现类从而才能实现不同的算法来满足要求
	public Int2Operate(ICalculate myCalculate) {
		this.iCalculate = myCalculate;
	}

	//操作两个数的方法,具体怎么操作的谁都不知道
	public int calculateTest(int a, int b) {
		return iCalculate.calculateInt(a, b);
	}
} 

下面是一个客户端的调用类:

package com.dylan.model.pattern.strategy;

public class ClientTest {

	/**
	 * @param args
	 * @author dylan 应用类,用来调试策略模式是怎么提现出来的
	 */
	public static void main(String[] args) {

		//当要实现两个数相加算法的时候
		Int2Operate i2p1 = new Int2Operate(new AddCalculate());
		System.out.println("两个数相加算的时候结果:"+i2p1.calculateTest(3, 4));
		
		//当要实现两个数相减算法的的时候
		Int2Operate i2p2 = new Int2Operate(new SubtractCalculate());
		System.out.println("两个数相减算的时候结果:"+i2p2.calculateTest(3, 4));
		
		//当要实现两个数相乘算法的的时候
		Int2Operate i2p3 = new Int2Operate(new MultiplyCalculate());
		System.out.println("两个数相减算的时候结果:"+i2p3.calculateTest(3, 4));

	}
} 

运行结果如下:

两个数相加算的时候结果:7
两个数相减算的时候结果:-1

 

两个数相减算的时候结果:12  

 

 

 

 

 

 

 

策略模式的小例子 自己编写的一个策略模式的简单例子,可以用于学习参考,同时本例子中还使用了泛型。导入到Eclipse中直接可以运行。同时此文件夹中还有一个关于策略模式的PPT,是张龙老师编写的,很不错! 我还写了一篇博文是和本程序相对应的,叫“设计模式之策略模式”,大家感兴趣的可以去看看! 立即下载

相关推荐

策略模式 以及实现的一个例子

NULL 博文链接:https://jzinfo.iteye.com/blog/558333

战略分析or策略分析(Strategy Analysis)

重点还要说的,就是变更策略,这对于大的团队合作很重要,因为扯皮的事情,要有法可依,但是对于小企业,特别是中小企业创业者而言,风险和变更都是敏捷的,必须聚焦如何达成未来状态,企业迅速发展,尽量避免在风险和变更中折腾,因为中小企业本身就是高风险,没有精力内耗。篇幅原因,我们重点掌握如何分析当前状态,对自己有个清楚的认知和定位,那么对于下步如何走,就是相对容易的事情,同样风险就会比较容易呈现出来,所以,重要的认清自我,认清当前的状态。所以,这套方法论适用于企业进行业务分析,也适合个人进行自我定位。

鸡毛掸子 2017

JAVA计算几个图形的面积

计算多个二维图形的面积之和,运用接口,多态,对象类型转换,要求自己定义一个求面积的接口,定义几个图形类

4.分解共同性-策略模式(Strategy)+模板方法(Template method)

重复的工作是让人最反感的,也是最打击生活的,特别是反复的写相同的代码,相同的功能,相类似的软件,你会发现自己沦落成为了一只程序鸭,每天都被这些死人的系统软件强*,当初学软件的的那一种幸福的心情顿时就没有了,说起以前,我觉得一辈子之中,肯定你会遇到几个让你改变一生的人的,那时已经是大一末了,班主任布置了一个编程项目,我抱着积极的心态去试了一下,没想到这就是我编程的开始,此时我很幸运的去到c#...

超人迪X 216

大疆OcuSync系统背后的黑科技:跳频扩频技术如何让你的无人机飞得更稳

本文深入解析了大疆OcuSync系统如何运用跳频扩频技术等先进无线通信方案,显著提升无人机在复杂环境下的飞行稳定性。系统通过跳频扩频与直接序列扩频技术协同工作,结合双频智能切换与多天线MIMO,有效对抗信号干扰与多径效应,确保控制指令与高清图传的可靠、低延迟传输,为用户带来更安心、更流畅的飞行体验。

ol7890123的博客 627

zabbix添加IBM服务器SNMPV3监控

本地采用欧冠的是zabbix5.0,服务器型号是SR860,使用snmpv3因为只支持这个,醉了。说明:本地采用欧冠的是zabbix5.0,服务器型号是SR860。

萌新包大人的博客 1984

设计模式-策略模式(Strategy)-Java

设计模式-策略模式(Strategy)-Java 目录 文章目录1、前言2、示例案例-电影票打折方案3、策略模式概述3.1、策略模式定义3.2、策略模式结构3.3、策略模式结构图中角色3.4、策略模式典型实现4、策略模式完整解决方案-电影票打折5、策略模式的典型应用6、总结6.1、优缺点6.2、适用场景***后记*** : 内容 1、前言   俗话说:条条大路通罗马。在很多情况下,实现某个目标的途径不止一条,例如我们在外出旅游时可以选择多种不同的出行方式,如骑自行车、坐汽车、坐火车或者坐飞机,可根

gaogzhen的博客 1694

使用CAPL实现DoIP刷写

本文介绍了使用CAPL实现基于DoIP协议的ECU刷写方法,包含完整源码。

qq_56033302的博客 2760

行为模式之策略模式的案例示范

1. 策略模式介绍 策略模式是一种行为模式,也是替代大量ifelse的利器。它所能解决的场景,一般是具有同类可替代的行为逻辑算法场景。比如,不同类型的交易方式(信用卡、支付宝、微信)、生成唯一ID策略(UUID、DB自增、DB+Redis、雪花算法、Leaf算法)等,都可以使用策略模式进行包装,供给外部使用。 策略模式有点像三国演义中诸葛亮给刘关张的锦囊: 第一个锦囊:见乔国老,并把刘备娶亲的事情搞得东吴人尽皆知。 第二个锦囊:用曹操打荆州的谎言骗跑在温柔乡的刘备回去。 第三个锦囊:让孙夫人摆平东吴的追

HUBA_yosa的博客 1783

西门子S7-1200模拟量的使用

模块类型核心参数输入信号处理输出信号配置转换原理数值范围TIA Portal配置编程要点 转换公式: 输出模拟量: 五、校准与线性化 硬件校准非线性补偿抗干扰措施数字滤波温度控制压力监控流量调节信号异常精度不足实践操作参考文档项目案例借鉴博客

weixin_51020122的博客 4771

ESP32-CAM与Thonny的完美搭配:从烧录到通信的完整流程

本文详细介绍了如何将ESP32-CAM与Thonny IDE完美结合,从固件烧录到通信测试的完整流程。通过硬件连接、MicroPython固件烧录、Thonny环境配置以及摄像头功能开发等步骤,帮助开发者快速搭建高效的物联网开发环境,实现图像采集与无线通信功能。

tomato的博客 1122

Strategy策略模式详解与实例

继续java的视频学习,博客还是不能丢,要坚持!Strategy策略模式是23个设计模式之一,是我们常用的模式之一。 Strategy策略模式体现了两个非常基本的面向对象设计原则: ---封装变化概念 ---编程中受用接口,而不是对接口的实现 1.定义: 定义一组算法,讲每个算法都封装起来,使它们之间可以互换; 使在客户端调用它们的时候能够互不影响的变化。 2

褚福舜 2124

Surface Go 2 变身 Linux 开发本:保姆级 Ubuntu 20.04 双系统安装与驱动配置全攻略

本文详细介绍了如何将 Surface Go 2 变身为高效的 Linux 开发本,涵盖 Ubuntu 20.04 双系统安装、专用内核配置、驱动优化等全流程。通过 linux-surface 内核安装和硬件驱动优化,确保 Surface Go 2 的触控、笔输入、摄像头等功能完美运行,适合开发者打造便携生产力工具。

weixin_30596165的博客 616

设计模式:策略模式(Strategy)

设计模式:策略模式(Strategy)

ProgramNovice的博客 1938

6、 实时家禽健康识别与疾病检测系统的深入解析

本文深入解析了一种基于物联网的实时家禽健康识别与疾病检测系统,结合图像分析和音频分析技术,能够有效识别病鸡并防止疾病传播。文章详细介绍了系统的测试环境、数据采集与预处理方法、图像与音频分析流程,并对系统性能进行了全面评估。最后提出了未来改进方向,包括多模态融合、深度学习应用及实时性优化等。

weixin_28840811的博客 186

华为ONU远程登录管理配置

华为P602E、EG8040CONU、EG8240H5、W626E等ONU、ONT默认无法配置管理IP,无法远程telnet登录管理。校园网项目中因故障诊断需要远程登录ONU可以通过OLT的远程WEB代理功能链接登录,具体配置如下:

symstandsun的博客 6109

策略模式 Strategy 实例与分析

策略模式C++实例与分析

Martin12111的博客 267

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

策略模式 (Strategy Pattern)

策略模式是一种行为设计模式,它将算法封装为独立对象,使它们可互换。该模式包含策略接口(定义算法)、具体策略类(实现算法)和上下文类(使用策略)。适用于需要动态切换算法或隐藏算法细节的场景。示例展示了支付方式(信用卡/支付宝/微信)和排序算法(冒泡/选择排序)的实现,通过策略模式可以灵活切换不同算法而不影响客户端代码,提高系统的扩展性和可维护性。

懵萌长颈鹿的博客 1368

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Unity 游戏设计模式 — 策略模式(Strategy)

策略模式(Strategy)一、使用策略模式的原因二、策略模式的定义三、策略模式的使用说明四、策略模式的实现范例五、中介者模式的优点和注意事项六、策略模式的总结 一、使用策略模式的原因 在设计游戏角色伤害时,因角色差异而使用不同的计算公式,如何解决,同一计算方式分布在不同的角色中、新增角色增加维护等问题,可以使用策略模式解决。 二、策略模式的定义 GoF对策略模式的解释:定义一组算法,并封装每个算法,让它们可以彼此交换使用。策略模式让这些算法在客户端使用它们时能更加独立。 策略模式在处理所谓的“算法时”,着

qq_40120946的博客 5224

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

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

Strategy策略模式

最后一次实验用到了策略模式,就想具体说一说。 我觉得策略模式是接口作用的典型体现,对于一个接口来说不实现方法,有多个具体的类会去实现具体的方法。可以完美使用在策略选择上,进行判断,然后根据条件去选择具体的策略类。(同一任务有多用算法实现) 举个例子: StrategyContext: public class StrategyContext{ Strategy act...

pandaww的博客 2万+

策略模式-Strategy Pattern

在现实生活中常常遇到实现某种目标存在多种策略可供选择的情况,例如,出行旅游可以乘坐飞机、乘坐火车、骑自行车或自己开私家车等,超市促销可以釆用打折、送商品、送积分等方法。 在软件开发中也常常遇到类似的情况,当实现某一个功能存在多种算法或者策略,我们可以根据环境或者条件的不同选择不同的算法或者策略来完成该功能,如数据排序策略有冒泡排序、选择排序、插入排序、二叉树排序等。 在策略模式中,我们可以定义...

心猿意碼 3892

策略模式(Strategy)

策略模式是指定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化。也就是说这些算法所完成的功能一样,对外的接口一样,只是各自实现上存在差异。策略模式把对象本身和运算规则区分开来,其功能非常强大,因为这个设计模式本身的核心思想就是面向对象编程的多形性的思想。1)策略模式是一个比较容易理解和使用的设计模式,策略模式是对算法的封装,它把算法的责任和算法本身分割开,委派给不同的对象管理。

zhimokf的专栏 1252

一文理解设计模式之--策略模式(Strategy)

首先定义一组算法,将每一个算法封装起来,从而使它们可以相互切换 使用场景 同样的流程,需要执行不同的策略算法,传入不同策略,执行传入对应的策略算法 代码示例 /** * Context持有Strategy的引用,并提供了调用策略的方法,所以叫Context * * @author July * @date 2020/10/20 */ public class Context { private Strategy strategy; /** * 传入策略 .

July的博客 3399

策略模式 Strategy Pattern

策略模式「strategy pattern 」(也称为policy pattern)是一种行为软件设计模式「behavioral」,可以在运行时选择算法。代码不是直接实现单个算法,而是接收运行时指令,指示使用一系列算法「a family of algorithms」中的哪一个。在上面的UML类图中,Context类不直接实现算法。相反,Context引用 用于执行算法的Strategy接口(Strategy.algorithm()),这使得Context独立于算法的实现方式。

DachuiLi的博客 1359

策略模式(Strategy 模式)

一、概述策略模式属于对象的行为模式。其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。二、结构  策略模式是对算法的包装,是把使用算法的责任和算法本身分割开来,委派给不同的对象管理。策略模式通常把一个系列的算法包装到一系列的策略类里面,作为一个抽象策略类的子类。用一句话来说,就是:“准备一组算法,并将每一

博客 2920
上一篇: Android异步从网络下载图片并且缓存图片到本地的demo
下一篇: 集合中几个比较重要的接口和类简介
月氏女神
博客等级 码龄14年 5粉丝 19原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值