策略模式实例

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

解决Unity与3DMax模型单位与中心点偏差的完整指南

本文详细解析了Unity与3DMax模型导入时常见的单位与中心点偏差问题,提供了从3DMax单位设置、FBX导出到Unity接收调整的完整解决方案。通过实战案例和高效工作流建议,帮助开发者实现unity与3dmax的单位统一,避免尺寸错误和轴心偏移,提升3D资源导入效率。

weixin_29015899的博客 286

1. 策略模式详解和示例

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

weixin_44806772的博客 1583

【实战指南】利用CAN适配器高效调试CAN总线通信

本文提供了一份利用CAN适配器高效调试CAN总线通信的实战指南。文章从硬件连接、终端电阻配置、软件参数设置等基础环节入手,详细解析了CAN适配器作为关键调试工具的工作原理与使用方法,并针对常见的通信故障提供了系统化的问题排查思路,帮助工程师快速打通通信链路,提升调试效率。

weixin_28285943的博客 412

Aruba CX交换机 初始化配置

Aruba CX 交换机 6000系列 8000系列交换机配置

Harry_Guo 1834

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

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

追逐消失的记忆 935

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

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

以梦为马 不负韶华 964

python指纹识别算法(亲测代码可用)

python指纹识别算法

2301_76482796的博客 3079

24、汽车黑客技术全解析:诊断代码、车库创建与系统攻防

本文深入探讨了汽车黑客技术的核心内容,包括诊断代码模式与参数ID、创建开放车库社区、汽车系统相关技术、硬件与软件工具、攻击与防御手段,以及车辆通信与网络安全。无论你是汽车安全研究人员、爱好者还是开发者,都能从中获取全面的技术解析与实践指南。

Apple的专栏 228

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

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

d3y1`5 81_09 744

【RBF预测】基于粒子群算法优化RBF神经网络实现数据回归预测含Matlab源码

1 简介 原油含水率预测对于确定油井水,油层位以及估计原油产量有着非常重要意义.BP神经网络是最近常用的原油含水率预测方法,然而,由于BP神经网络存在容易陷入局部极小值,收敛速度慢等问题,影响了其预测的实用性和准确性,对此,提出基于粒子群优化RBF神经网络(PSO-RBFNN)的原油含水率预测方法,粒子群优化算法用于RBF神经网络参数优化.在分析原油含水率预测的影响因素基础上,建立粒子群优化RBF神经网络的原油含水率预测模型.实验结果表明,在原油含水率预测中,基于粒子群优化RBF神经网络比BP神经网络有着

qq_59747472的博客 1232

策略模式实例与UML

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

拼搏的小船长 1101

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

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

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

飞浪纪元FE的博客 588

OV9734 DATASHEET,完整规格书

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

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

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

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

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、付费专栏及课程。

余额充值