策略模式实例

C#策略模式(Strategy Pattern) 使用实例 一、概述 我们来实现一个企业的工资系统,该企业中不同级别的员工工资算法都不相同,针对该问题,最容易想到的莫过于在代码中堆积一大堆if…else…语句或者是switch…case…语句。如果该企业中不同级别的员工过多,或是对级别的调整比较频繁,那该系统就会显得复杂而脆弱。如何能将对象和算法解耦,从而使得在系统运行时能透明的改变对象的算法呢?这就到了策略模式大显身手的时候了。 二、策略模式 策略模 阅读详情

 

 

本文主要通过一个使用策略模式的实例来帮助读者了解策略模式。

策略模式体现了面向对象程序设计中非常重要的两个原则:

封装变化的概念。

编程中使用接口,而不是使用的是具体的实现类(面向接口编程)。

 

类图:

 

其优点:

1.上下文和具体策略是松耦合关系。因此上下文只知道它要使用某一个实现Strategy接口类的实例,但不需要知道具体是哪一个类。

2.策略模式满足“开-闭原则”。当增加新的具体策略时,不需要修改上下文类的代码,上下文就可以引用新的具体策略的实例。

 

适合情景:

1.一个类定义了多种行为,并且这些行为在这个类的方法中以多个条件语句的形式出现,那么可以使用策略模式在类中使用大量的条件语句。

2.程序不希望暴露复杂的、与算法有关的数据结构,那么可以使用策略模式来封装算法。

3.需要使用一个算法的不同变体。

 

例子:

本文例子为“发奖策略”

AwardPrizeStrategy接口,其中有发奖方法,需要实现类实现。

package com.ismartgo.uqcode.strategy.awardPrize;

import com.ismartgo.uqcode.model.UqcUserJoinRecord;

public interface AwardPrizeStrategy {
	
	boolean award(String takePrizeParams , UqcUserJoinRecord record);

}

免费资源发奖实现类:

package com.ismartgo.uqcode.strategy.awardPrize.impl;

import java.util.HashMap;
import java.util.Map;

import com.ismartgo.uqcode.common.utils.DateUtil;
import com.ismartgo.uqcode.common.utils.HttpClientUtil;
import com.ismartgo.uqcode.model.UqcUserJoinRecord;
import com.ismartgo.uqcode.strategy.awardPrize.AwardPrizeStrategy;

public class AwardFreeResourcePrizeStrategy implements AwardPrizeStrategy {

	@Override
	public boolean award(String takePrizeParams, UqcUserJoinRecord record) {
		//发免费资源逻辑
		return true;
	}

}

红包发奖实现类:

package com.ismartgo.uqcode.strategy.awardPrize.impl;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.commons.lang.StringUtils;

import com.ismartgo.uqcode.common.constants.QRSVConstants;
import com.ismartgo.uqcode.common.utils.DateUtil;
import com.ismartgo.uqcode.common.utils.HttpClientUtil;
import com.ismartgo.uqcode.common.utils.MD5Util;
import com.ismartgo.uqcode.common.utils.Wx3HttpUtils;
import com.ismartgo.uqcode.model.UqcUserJoinRecord;
import com.ismartgo.uqcode.strategy.awardPrize.AwardPrizeStrategy;

import net.sf.json.JSONObject;

public class AwardMoneyPrizeStrategy implements AwardPrizeStrategy{	
	
	@Override
	public boolean award(String takePrizeParams, UqcUserJoinRecord record) {

		
		Map<String, Object> paramsMap = new HashMap<String, Object>();
		//发奖参数屏蔽
		
		JSONObject result = null;
		try {
			 result = Wx3HttpUtils.post(URL,paramsMap);
		} catch (Exception e) {
			e.printStackTrace();
		}
		if(result!=null&&result.getInt("error")==0) {
			return true;
		}

		return false;
	}


}

Context类:

package com.ismartgo.uqcode.strategy.awardPrize.context;

import com.ismartgo.uqcode.model.UqcUserJoinRecord;
import com.ismartgo.uqcode.strategy.awardPrize.AwardPrizeStrategy;

public class AwardPrizeContext {
	
	private AwardPrizeStrategy awardPrizeStrategy;

	public AwardPrizeContext(AwardPrizeStrategy awardPrizeStrategy) {
		super();
		this.awardPrizeStrategy = awardPrizeStrategy;
	}

	public boolean award(String prizeParams,UqcUserJoinRecord record) {
		return awardPrizeStrategy.award(prizeParams, record);
	}
}

 

 

设计模式之策略模式(实例+Demo) 马上要放清明小长假了,各位都想好去哪里玩了没?清明前的周日,整理下发型,梳理好心情,发个文章,再思考下清明去哪玩,哈哈哈。 不多废话,切入正题: 你从本文主要能了解到如下几点:1. 为什么要写这篇文章?2. 什么是策略模式?3.设计原则 4. 策略模式的实现及实例。5. 策略模式的优缺点。6.其他 1. 为什么要写这篇文章? 简单来说四个字:记录分享。用来记录供自己快速... 阅读详情

相关推荐

SpringBoot中策略模式+工厂模式业务实例(接口传参-枚举类查询策略映射关系-执行不同策略)规避大量if-else

上面讲了策略模式在Java中的使用示例。下面看一个在SpringBoot中的实际使用示例。业务场景:有多个煤矿,信号灯有多个厂家/规则,每个煤矿对应一种信号灯。需要编写通用接口,根据传递的请求码不同获取到该煤矿对应的信号灯规则,并执行对应的信号灯规则获取数据。

BADAO_LIUMANG_QIZHI的博客 3114

【设计模式】策略模式实例

系列文章目录 第六章 行为模式(上) 目录 系列文章目录 前言 一、🌍策略(Strategy)模式是什么?🌍 二、🌍策略(Strategy)模式的优缺点🌍 三、🌍策略(Strategy)模式的结构🌍 四、🌍实例演示🌍1.🌕实例概述🌕 2.🌕代码演示🌕 3.🌕实验结果🌕 总结 前言 设计模式,又称为软件设计模式,是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。 学习设计模式可以提高程序员的思维能力、编程能力和设计能力,使程...

weixin_51167671的博客 2288

【GNSS数据处理】赫尔默特(helmert)方差分量估计解析及代码实现

一、背景 helmert方差分量估计是方差-协方差分量估计的一个特例,在近现代测量平差中,我们处理的数据有明显的变化,数据序列中包括粗差,数据类型不再单一等问题。当我们遇到数据类型两类及以上时,可以考虑使用赫尔默特方差分量估计,应用的前提条件是不同类别的数据需要相互独立,这样我们的权阵就是对角阵。 二、引入 我们先用王者荣耀这款游戏引入一下,王者可是撩妹利器,哈哈,就像你有两部手机(安卓和苹果),带妹的时候大概率会用苹果,因为游戏体验方面苹果要优于安卓,带妹的时候不掉帧,不卡顿,不闪退,要操作有操作,有皮肤

ANKP的博客 1万+

1. 策略模式详解和示例

1. 什么是策略模式: 策略模式就是一种行为可能会因为不同的逻辑造成多个算法。比如人吃饭,美国人吃饭用刀叉,中国吃饭用筷子。都是吃饭的行为但是使用的工具(算法)不一样。而策略行为就是把这写工具封装为对象,不同的人会动态的调用不同的对象,来实现吃饭这一行为。 ​ 2. 策略模式组成: 环境类(Context):用一个ConcreteStrategy对象来配置。维护一个对Strategy对象的引用。可定义一个接口来让Strategy访问它的数据。 抽象策略类(Strategy):定义所有支持的算法的公共接口。

weixin_44806772的博客 1583

利用Arcgis提取nc数据并计算区域年均温

1.下载数据。2.解压数据至不含中文的路径中。打开工具箱中的多维分析工具-创建NetCDF栅格图层,导入数据。3.打开工具箱中的数据管理工具-图层和表视图-创建栅格图层,导入数据,对输出数据进行命名,得到月均温栅格数据。4.选择工具箱-Spatial Analyst工具(空间分析工具)-地图代数-栅格计算器,计算全国一年年均温。​5.将其导出为.tif格式数据,方便后期使用。6.选择工具箱-Spatial Analyst工具(空间分析工具)-区域分析--以表格显示分区统计,得到分区域的气温数据。

什么都学亿点点的博客 7992

将pytorch的权值矩阵量化为定点数补码并导入FPGA中

Xilinx FPGA实现LSTM算法时对ROM的初始化 将pytorch框架的权重矩阵以定点数补码的形式导入到FPGA中 文章目录Xilinx FPGA实现LSTM算法时对ROM的初始化1. pytorch框架中的LSTM2. 初始化一个RNN模型 3. 初始化ROM的coe文件格式 4. 将参数转换为补码,并且输出到coe文件 5. 配置一个ROM 6. 结论7. 代码 1. pytorch框架中的LSTM pytorch框架将LSTM算法中的八个权值矩阵连接成两个矩阵,假设要导入的LSTM网络的输

随缘分享 4527

设计模式之策略模式使用案例

使用场景一、 记得在中学时代,每次考完老师评讲试卷,都会说这道题有多少种解法,然后在黑板上板书第一种、第二种解法。其实这个情况就类似于今天的情况,也就是策略模式。他表示的是在遇到一种问题有多种解法的时候,我们可以根据环境或者条件的不同选择不同的算法或者策略来完成该功能。 场景二、 在业务场景当我我们需要处理相同业务不同的类型时我们可以采用到策略模型。例如在我常见的工作中经常存在各种类型的审批...

追逐消失的记忆 935

Silvaco TCAD | 从PIN到APD:高性能光电探测器的仿真设计与优化

本文详细介绍了使用Silvaco TCAD进行光电探测器仿真设计与优化的全过程,从基础的PIN结构到高性能APD的实现。通过实战案例和代码示例,展示了如何优化器件参数、实现雪崩效应以及进行高级仿真分析,帮助工程师提升光电探测器的量子效率和响应速度。

weixin_29218509的博客 426

C#策略模式(Strategy Pattern)实例教程

这篇文章主要介绍了C#策略模式(Strategy Pattern),以一个简单的实例讲述了C#策略模式的实现方法,包括策略模式的用途以及具体实现方法,需要的朋友可以参考下 本文以一个简单的实例来说明C#策略模式的实现方法,分享给大家供大家参考。具体实现方法如下: 一般来说,当一个动作有多种实现方法,在实际使用时,需要根据不同情况选择某个方法执行动作,就可以考虑使用策略模式。 把动作抽象成接口,比如把玩球抽象成接口。代码如下: 把动作抽象成接口,比如把玩球抽象成接口。代码如下: 1

以梦为马 不负韶华 964

支付逻辑漏洞的八大姿势(上篇)

学习支付漏洞,看这篇文章!!!文章来源:SecHub网络安全社区(本资料仅供学习参考,严禁使用者进行未授权渗透测试!严禁任何形式的转载!

qq_39493066的博客 1358

JeecgBoot漏洞利用工具解析:一键getshell原理与安全加固实践

在应用安全领域,远程代码执行(RCE)和文件上传漏洞是Web系统面临的高危威胁,其核心原理在于对用户输入的控制不足或安全校验缺失。攻击者通过构造恶意请求,可绕过系统边界,在服务器上执行任意命令或上传恶意文件,从而获取系统控制权。这类漏洞的技术价值在于揭示了应用层安全防护的薄弱环节,其利用方式自动化、集成化趋势明显,极大地提升了攻击效率。在低代码开发平台等快速构建的业务系统中,此类风险尤为突出。应用场景广泛覆盖安全测试、渗透评估与应急响应。本文聚焦于JeecgBoot平台的历史高危漏洞,深入解析其SQL注入、

weixin_30787531的博客 552

设计模式-17策略模式 (Strategy Pattern) 源码实例大全

策略模式是一种行为设计模式,它定义一系列算法并将其封装为独立对象,使它们可以相互替换。该模式使算法独立于使用它的客户端而变化。摘要包含: 模式定义:封装可互换的算法族,使算法独立于客户端。 核心实现要素: 策略接口(如Comparator) 具体策略类(如UserAgeComparator) 上下文类(如UserService) 典型应用场景: Java标准库的Comparator接口 ThreadFactory线程创建策略 多种排序算法的灵活切换 关键优势: 运行时动态切换算法 避免条件语句 符合开闭原则

d3y1`5 81_09 744

RK3568平台YOLO11模型部署实战:从环境搭建、模型转换到板端性能优化全解析

摘要: 本文详细介绍了在RK3568平台上从零部署YOLO11模型的完整流程。主要内容包括:1) 基于Conda搭建Python 3.8开发环境并安装RKNN-Toolkit2工具链;2) 使用LabelImg工具标注数据并构建YOLO格式数据集;3) 基于Ultralytics框架进行YOLO11模型训练及参数优化;4) 实现PyTorch→ONNX→RKNN的完整模型转换链。文章特别针对RK3568平台的NPU特性提供了关键参数配置建议,并分享了实际开发中的经验总结,最终可达到30FPS的稳定推理性能。

LXY_LOVE36的博客 280

策略模式实例与UML

<?php interface FlyBehavior{ public function fly(); } class FlyWithWings implements FlyBehavior{ public function fly(){ echo "Fly With Wings ".PHP_EOL; } } class FlyWithNo implem

拼搏的小船长 1101

勇闯dify v1.0.0之设置模型供应商。解决:Reached maximum retries (3) for URL https://marketplace.dify.ai/

朋友们,大家好,今天带大家来勇闯dify v1.0.0。为什么叫勇闯呢?我就这么说吧,本来我昨天就想带大家勇闯v1.0.0的。但是dify的marketplace访问不了。公司的网和手机热点都试了,就是访问不了。我们连个模型都没有,还勇闯个球啊,对吧,就搁置了。今天,我赶紧看看这个marketplace好了没。一看,可以了。赶紧写下这篇博客,帮助同志们走出困境。

xiezhipu的博客 4616

廖雪峰Python教程[完整版]

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

接口进阶:接口子类实例化和策略模式

文章目录几种类型的实例化示例生成CS 0501:实例化场景策略模式案例设计谜题 几种类型的实例化 抽象类 - 不可以直接实例化 同样纯抽象类 - 接口,也不可以直接实例化 半抽象类 - 严格来说不算抽象类,可以自带实现,使用虚方法的类,子类可以有选择的重写,这里方法必须有定义和实现,不然会触发 - CS0501的错误。 示例生成CS 0501: “成员函数”必须声明一个主体,因为它没有标记为抽象、外部或部分。 非抽象方法必须有实现。 // CS0501.cs // compile with: /

飞浪纪元FE的博客 588

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

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

简单易用策略模式分析与实例详解

1.简介 In computer programming, the strategy pattern (also known as the policy pattern) is a behavioral software design pattern that enables selecting an algorithm at runtime. Instead of implementing a...

城南少年与猫 214

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

PHP工厂模式和策略模式使用实例

工厂模式:着眼于得到对象,并操作对象。 策略模式:着重得到对象某方法的运行结果。 ```php //实现一个简单的计算器 interface MathOp{ public function calculation($num1,$num2); } //加法 class MathAdd implements MathOp{ public function calculation($num1,$num2){ return $num1 + $num2; } } //减法 class MathSu

九月离少的博客 309

策略模式Spring框架下开发实例

采用策略模式的情况一般是封装多重if-else/switch下的不同处理逻辑,这些逻辑可以抽象为一个行为(比如封装参数,做前置校验等),将这个行为定义为接口方法/*** 策略接口*///本例中根据不同产品类型执行不同的返回参数封装逻辑将上文提到的多重if-else/switch中不同情况及其处理逻辑抽象成具体策略类和其内部方法执行逻辑/*** 记录器参数处理类*/@Component//注解使用见3@Autowired@Override//记录器的处理逻辑。

fengdongnan的博客 963

Strategy策略模式详解与实例

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

褚福舜 2124

设计模式实例学习-策略模式

此前在某公司面试时,面试官问我说有没有自己写什么东西分享,我说有一些,但是很多东西发现别人都写过了,自己慢慢就不太想再写了。他跟我说让我继续坚持写,总会有好处的。后来也知道,写博客有时候也许不一定是分享,也可以是对自己学习的总结,加深印象。秋招对于我,其实在10月末就已经结束了,休息一阵,不敢颓废,现在打算开始写些东西记录自己的学习过程。

你若嘻哈过盛,别人就不再欣赏你的认真 829

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

面向对象的编程中经常会用到设计模式,而其中的策略模式(Strategy)使用算是最频繁的模式之一,策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。下面将用一个简单的小实例来谈谈策略模式(Strategy)是怎么实现的。       两个int类型的整数可有多重操作方式,例如相加、相减、相乘等,我们可以写出这些算法的实现

从不曾离开的只有自由和梦想! 660

chapter03_Bean的实例化与策略模式

先扩展一下BeanFactory接口,获取bean的时候,可以传入参数,这样就可以使用带参数的构造器。由于实例化的方式很多,我们这里使用策略模式,便于以后不断地扩展。改造doCreateBean方法,灵活切换对象实例化的方式。使用传入的构造器和传入的参数表,创建CGLIB代理对象。使用传入的构造器和传入的参数表,直接new对象。给测试的Bean,新建空参构造器和有参构造器。

亮晶晶的博客 307

java策略模式实例

在Java的集合框架中,经常需要通过构造方法传入一个比较器Comparator,或者创建比较器传入Collections的静态方法中作为方法参数,进行比较排序等,使用的是策略模式。   策略模式的定义   定义一组算法,将每个算法都封装起来,并且使它们之间可以互换。   策略模式使这些算法在客户端调用它们的时候能够互不影响地变化。     体现了两个非常基本的面

miliang1688的专栏 745

策略模式介绍以及headfirst上的两个实例

定义:策略模式定义了一系列的算法,并将每一个算法封装起来,而且使他们可以相互替换,让算法独立于使用它的客户而独立变化。 分析下定义,策略模式定义和封装了一系列的算法,它们是可以相互替换的,也就是说它们具有共性,而它们的共性就体现在策略接口的行为上,另外为了达到目的,也就是说让算法独立于使用它的客户而独立变化,我们需要让客户端依赖于策略接口。 策略模式的优缺点: 优点: 1、结构清晰,把策略分离成一...

352

策略模式原理及Java代码实例

一、策略模式的定义         —— 定义了一组算法,将每个算法包装起来,并且使它们之间可以互换         —— 策略模式使这些算法在客户端调用它们的时候能够相互不影响的变化,改变不同算法的实现方式不影响客户端的使用,即策略模式让算法独立于使用它的客户端而独立变化。         策略模式在Java中处处可以体现,TreeSet和TreeMap中均存在这样的构造方法:TreeSe

天道酬勤 3856
上一篇: 服务雪崩效应
下一篇: 设计模式的六大原则
youngerTree
博客等级 码龄9年 38粉丝 117原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值