设计模式:7、策略模式(政策)

《C++设计模式》策略模式 介绍了C++模式的策略模式 阅读详情

目录

0、定义

1、策略模式的三种角色

2、策略模式的UML类图

3、示例代码


0、定义

        定义一系列算法,把它们一个个封装起来,并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化。

1、策略模式的三种角色

  • 策略(Strategy):策略是一个接口,该接口定义若干个算法标识,即定义了若干个抽象方法。
  • 具体策略(concreteStrategy):具体策略是实现策略接口的类。具体策略实现策略接口所定义的抽象方法,即给出算法标识的具体算法。
  • 上下文(Context):上下文是依赖于策略接口的类,即上下文包含有策略声明的变量。上下文中提供一个方法,该方法委托策略变量调用具体策略所实现的策略接口中的方法。

2、策略模式的UML类图

3、示例代码

策略:

package xyz.jangle.design.strategy;

public interface Strategy {
	
	public void algorithm();

}

具体策略A

package xyz.jangle.design.strategy;

public class ConcreteStrategyA implements Strategy {

	@Override
	public void algorithm() {
		System.out.println("这是方法A");
	}

}

具体策略B

package xyz.jangle.design.strategy;

public class ConcreteStrategyB implements Strategy {

	@Override
	public void algorithm() {
		System.out.println("这是方法B");
	}

}

上下文

package xyz.jangle.design.strategy;

public class Context {
	
	private Strategy strategy;

	public Context(Strategy strategy) {
		super();
		this.strategy = strategy;
	}

	public void setStrategy(Strategy strategy) {
		this.strategy = strategy;
	}
	
	public void lookAlgorithm() {
		strategy.algorithm();
	}
	

}

客户端(使用)

package xyz.jangle.design.strategy;

public class AppMain7 {

	public static void main(String[] args) {
		ConcreteStrategyA strategyA = new ConcreteStrategyA();	
		Context context = new Context(strategyA);		// 注入策略A
		context.lookAlgorithm();
		System.out.println("-------------");
		context.setStrategy(new ConcreteStrategyB());	// 注入策略B
		context.lookAlgorithm();

	}

}

执行结果:

这是方法A
-------------
这是方法B

设计模式 ( 十八 ) 策略模式Strategy(对象行为型) 设计模式 ( 十八 ) 策略模式Strategy(对象行为型) 1.概述 在软件开发中也常常遇到类似的情况,实现某一个功能有多种算法或者策略,我们可以根据环境或者条件的不同选择不同的算法或者策略来完成该功能。如查找、排序等,一种常用的方法是硬编码(Hard Coding)在一个类中,如需要提供多种查找算法,可以将这些算法写到一个类中,在该类中提供多个方法,每一个方法对应一个 阅读详情

相关推荐

QGIS v3.28 高效加载OSM在线地图的三种实用方法

本文详细介绍了在QGIS v3.28中高效加载OSM在线地图的三种实用方法:通过XYZ Tiles直接连接、使用QuickMapServices插件以及配置WMS/WTMS服务。针对每种方法提供了具体操作步骤、常见问题解决方案和性能优化建议,帮助用户根据需求选择最适合的方案,提升GIS工作效率。

weixin_29233333的博客 432

Java设计模式之策略模式(UML类图分析+代码详解)

策略模式:分别封装行为接口,实现算法族,超类里放行为接口对象,在子类里具体 设定行为对象。1) 策略模式(Strategy Pattern)中,定义算法族,分别封装起来,让他们之间可以 互相替换,此模式让算法的变化独立于使用算法的客户。2) 上面说的1 的问题,其实是继承带来的问题:对类的局部改动,尤其超类的局部改 动,会影响其他部分。1) 其它鸭子,都继承了Duck类,所以fly让所有子类都会飞了,这是不正确的。1) 应用实例要求 编写程序完成前面的鸭子项目,要求使用策略模式。

m0_51750419的博客 8498

AD9361数字调制入门:从IQ调制原理到动手实现第一个ASK信号(Vivado工程详解)

本文详细介绍了如何使用AD9361射频收发器实现ASK数字调制,从IQ调制原理到Vivado工程实现。通过Verilog代码示例和FPGA架构设计,帮助开发者理解纯逻辑实现数字调制解调的关键技术,特别适合软件无线电(SDR)初学者入门实践。

weixin_29158047的博客 374

设计模式16——策略模式

1、定义算法家族,分别封装起来,让它们之间可以相互替换,此模式让算法的变化,不会影响到使用算法的客户。

weixin_43687024的博客 1165

运动控制中的编码器信号优化:滤波技术实战解析

本文深入解析运动控制系统中编码器信号的滤波技术优化方案。从硬件RC低通滤波器参数计算到软件卡尔曼滤波算法实践,详细介绍了如何有效抑制传导干扰、辐射干扰和机械振动带来的信号噪声。通过半导体设备升级案例,展示了三级混合滤波架构如何将位置检测精度提升至±0.8μm,为工程师提供了一套完整的信号优化方法论。

weixin_29247219的博客 237

克里金插值(Kriging)在MATLAB中的实现(克里金工具箱)

一,直接献上克里金插值MATLAB工具箱 链接:https://pan.baidu.com/s/1p0lt2G8KQ-els7Dyw5jPFg 提取码:wcss 下载后将该程序添加到MATLAB安装文件夹中的/toolbox下,然后在设置路径中添加该程序文件为默认路径即可调用程序。 资源中内附程序使用说明PDF。 二、本人实际操作代码如下所示,标注如下 load data1 %载入数据 %模型参...

qq_40937675的博客 6万+

设计模式系列(二) ——策略模式

策略模式策略模式概要策略模式定义策略模式结构鸭子模型引入提出需求解决方案之——使用继承解决方案之——使用接口解决方案之——策略模式总结策略模式涉及的设计原则策略模式优缺点 策略模式概要 策略模式定义 什么是策略模式?先看下《 Head First 》一书中的定义: 从定义来看,说的过于抽象,可能会一头雾水,不明白策略模式到底是个啥东西,实际上"策略"二字古已有之,在古代中又称“计策”,“计谋”,简单点说就是指对象有某个行为,但是在不同的场景中,该行为有不同的实现算法,说白了就是解决同一问题的不同解决办法。

羽凌薇的博客 971

保姆级教程:用YOLOv8/9/10搞定仪表盘指针识别,附完整数据集和Python环境配置

本文提供了一份基于YOLOv8/v9/v10的仪表盘指针检测全流程指南,涵盖环境配置、数据集构建、模型选型、训练调优和部署落地等关键步骤。通过详细的代码示例和实战经验,帮助开发者高效解决工业视觉中的仪表盘检测难题,特别适合电力巡检、智能监控等应用场景。

weixin_29031057的博客 1334

设计模式—策略模式

策略模式(Strategy),定义了一组算法,将每个算法都封装起来,并且使它们之间可以互换。UML结构图如下: 其中,Context是上下文,用一个ConcreteStrategy来配置,维护一个对Strategy对象的引用;Strategy是策略类,用于定义所有支持算法的公共接口;ConcreteStrategy是具体策略类,封装了具体的算法或行为,继承于Strategy。  1. Context上下文   Context上下文角色,也叫Context封装角色,起承上启下的作用,屏蔽高层模...

liuxiaohui1的博客 229

BambuStudio学习笔记:GCode 类

关键成员解析 核心配置组件 状态跟踪系统 功能模块集成 核心方法剖析 主输出管道 实现多阶段处理: 分层处理流程: 实现智能路径规划: 关键特性: 实现模板故障检测: 采用三级流水线: 支持扩展类型: 实现多通道输出: 采用: 实现: 支持: 支持模块化编译: 典型流程: 实现功能:

zzzkk2009的专栏 925

【WRF工具】WRF 模型输出可视化工具 RIP4

【WRF工具】WRF 模型输出可视化工具 RIP4

WW、forever的博客 1593

Java设计模式——策略模式

策略模式: 策略模式是一种行为型模式, 它将对象和行为分开, 将行为定义为一个行为接口和具体行为的实现 策略模式最大的特点是行为的变化, 行为之间可以相互替换 每个if判断都可以理解为一个策略. 本模式是的算法可独立于使用它的用户而变化。

xiaoshitou_2015的博客 2681

地表最强之Android微信语音/腾讯会议通话录音

地表最强之Android微信语音/腾讯会议通话录音

cczhengv 6096

7 常用设计模式之策略模式

本文主要讲解Java设计模式之策略模式 策略模式介绍 策略模式也叫政策模式,是一种行为型设计模式,也是父类与子类关系的一种模式。策略模式采用了面向对象的继承和多态机制。策略模式是定义了一系列宣发并将算法封装起来,使他们可以互相替换,且算法的变化不会影响到使用算法的客户。需要设计一个接口,为一系列实现类提供统一的方法,多个实现类实现该接口,设计一个抽象类(可有可无,属于辅助类),提供辅助函数。 策略...

damokelisijian866的博客 549

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

设计模式笔记--策略模式

设计模式笔记--策略模式

bihansheng2010的博客 7319

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

【设计模式】-策略模式

我用策略,俘获你的芳心;

知识追寻者(Inheriting the spirit of open source, Spreading technology knowledge;) 1788

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

介绍策略模式

Allen 880

Java设计模式教程-策略模式(Strategy Pattern)

相关源码 1 简介 1.1 定义 也叫做政策模式(Policy Pattern) wiki 对象有某个行为,但是在不同的场景中,该行为有不同的实现算法.。比如每个人都要“交个人所得税”,但是“在美国交个人所得税”和“在中国交个人所得税”就有不同的算税方法. 定义 Define a family of algorithms,encapsulate each one,and make them interchangeable. 定义一组算法,将每个算法都封装起来,并且使它们之间可以互换。 常见 if/els

JavaEdge全是干货的技术号 1324

策略模式详解附有代码案例分析(包含策略模式在源码中的应用以及代码示例)

策略模式一、策略模式的概念与角色(一)、策略模式的概念(二)、策略模式的角色二、策略模式的应用场景三、策略模式的通用写法四、策略模式的支付案例代码示例五、策略模式在源码中的应用六、策略模式的优缺点(一)、优点(二)、缺点 一、策略模式的概念与角色 (一)、策略模式的概念 ​ 策略模式又叫做政策模式,它是将 定义的算法家族、分别封装起来,让他们之间可以互相替换,从而让算法的变化不会影响到使用算法的用户。属于行为型模式。 ​ 策略模式使用的就是面向对象的继承和多态机制,从而实现统一行为在不同场景下具备不同实

hyyyya的博客 3826

设计模式之策略模式

一、策略(Strategy)模式 策略模式的用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。 假设现在要设计一个贩卖各类书籍的电子商务网站的购物车(Shopping Cat)系统。一个最简单的情况就是把所有货品的单价乘上数量,但是实际情况肯定比这要复杂。比如,本网站可能对所有的教材类图书实行每本一元的折扣;对连环画类图书提供每本7%的促销折扣,而对非教材类的计算机图书有3%的折扣;对其余的图书没有折扣。由于.

HPFBoy的博客 412

设计模式---策略模式

设计模式 策略

追赶时代的博客 543

设计模式(1):行为型-策略模式(Strategy)

设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的;设计模式使代码编制真正工程化;设计模式是软件工程的基石脉络,如同大厦的结构一样。 设计模式分为三种类型,共23种。 创建型模式(5):单例模式、抽象工厂模式、建造者模式...

後雪寒的专栏 584

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

Define:Define a family of algorithms, encapsulate each one, and make them interchangeable. Strategy lets the algorithm vary independently from clients that use it. 一、 策略(Strategy)模式策略模式的用意是针对一组算法,

薛敬明的专栏 1684
上一篇: 设计模式:6、装饰模式(包装器)
下一篇: 设计模式:10、外观模式
博风
博客等级 码龄16年 442粉丝 357原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值