Spring策略模式的实现】的更多相关文章

场景: 有时候一个业务方法有多个实现类,需要根据特定的情形进行业务处理. 例如:商店支付,我们可以使用支付宝.微信扫描农行.xxx行的快捷支付(而不是微信支付.支付宝支付二维码)购买商品. 实现代码(代码和以上不相干,工作中实际使用的代码,供参考): public interface ConvertService{ /*** * 转换 * @param request * @return */ ConversionResponse convert(ConversionRequest reques…
策略模式特性 1.执行最终结果一样 2.执行过程和执行逻辑不一样 3.使用同一接口 达到目的就可以了 Git地址 https://github.com/wujiachengSH/WjcStrategy 策略模式比较简单,直接看代码 1.首先来个接口 package com.wjc.Strategy; import java.util.Date; public interface DateUtil { String getDate(Date date); } 2.随便来2个实现类 package…
一.理论 在spring中经常有读取配置文件的需求,这里就会用到一个Spring提供的Resource接口 Resource 接口是具体资源访问策略的抽象,也是所有资源访问类所实现的接口.Resource 接口主要提供了如下几个方法: getInputStream():定位并打开资源,返回资源对应的输入流.每次调用都返回新的输入流.调用者必须负责关闭输入流. exists():返回 Resource 所指向的资源是否存在. isOpen():返回资源文件是否打开,如果资源文件不能多次读取,每次读…
1.前言: 这是策略模式在spring中的使用,对策略模式不了解对同学可以移步在商城中简单对使用策略模式. 2.问题: 在策略模式中,我们创建表示各种策略的对象和一个行为,随着策略对象改变而改变的 context 对象.策略对象改变 context 对象的执行算法. 在spring 中,策略对象在正常情况下是,在启动Spring容器对时候,已经将策略对象加载创建完成成为bean. 我们如何在Spring中正确对使用策略模式,这样又会发生什么问题呢? 3.使用场景: 场景:商城活动中有几种,满减,…
一.         什么是策略模式 策略模式的定义/含义:策略本身就是为了实现某一个目标而采取的一种工作方式,因此只要能够达成目标,则采取哪一种策略都可以:因此多种实际的策略之间是相互平行的. 注意:策略模式与模板模式是不同的,模板模式是定义了一个骨架(会有很多个步骤,其中可能包含必选和可选步骤,步骤之间可能会有一定的顺序,模板模式在顶级骨架中可能会有部分实现,也可将部分实现延迟到子类中,例如:TestCase的过程,一般都包含setUp.testCase.tearDown操作,testCas…
直入主题 我们都知道,设计模式(Design Pattern)是前辈们对代码开发经验的总结,是解决特定问题的一系列套路.它不是语法规定,而是一套用来提高代码可复用性.可维护性.可读性.稳健性以及安全性的解决方案. 那么,我们可能都了解过设计模式,但是在项目中怎么使用可能还是会有点疑惑,今天,公司的项目刚好有一个场景来让我使用一个设计模式:策略模式. 场景 关于用户订单充值(订单支付同理),我们都知道,现今的支付方式是非常的多的,例如:支付宝.微信.银联.钱包(各个APP的账户余额)等等. 查询实…
最近系统需要对不同维度的数据进行差异化计算,也就会使用不同算法.为了以后更加容易扩展,结合Spring框架及策略模式对实现架构做了系统设计. 1. 定义策略接口(Strategy): import com.dmall.scfc.biz.dao.model.ScfcScoreField; import com.dmall.scfc.biz.dao.model.ScfcScoreFieldValue; import com.dmall.scfc.biz.dto.ScoreModelDimension…
策略模式(Strategy Pattern) 一.策略模式的应用场景 策略模式的应用场景如下: 系统中有很多类,而他们的区别仅仅在于行为不同. 一个系统需要动态的在集中算法中选择一种 二.用策略模式实现选择支付方式的业务场景 一个常见的应用场景就是大家在支付时会提示选择支付方式,如果用户未选,系统会使用默认的支付方式进行结算.下面我们用策略模式来模拟此业务场景: /** * 定义支付规范和支付逻辑 */ public abstract class Payment { //支付类型 public…
策略模式是GoF23种设计模式中比较简单的了,也是常用的设计模式之一,今天我们就来看看策略模式. 实际案例 我工作第三年的时候,重构旅游路线的机票查询模块,旅游路线分为四种情况: 如果A地-B地往返都可以直达,那么查询两张机票(往返) 如果A地-B地去程无法直达,需要中转,但是返程可以直达,那么查询三张机票(去程两张,返程一张) 如果A地-B地去程可以直达,但是返程需要中转,那么查询三张机票(去程一张,返程两张) 如果A地-B地往返都无法直达,那么查询四张机票(去程两张,返程两张) 在我重构前,…
策略模式 策略模式用于解决判断分支过多的问题,使代码变得简洁和优雅, 策略模式在多种方式在项目中落地,下面举例说明通过指定不同类型的订单使用策略模式执行不同的业务逻辑 文章参考自公众号:石杉的架构笔记 一.项目结构  二.各个类的说明 1.自定义注解 //通过注解中的value值来表示不同的分支,从而执行不同的业务逻辑 @Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited pu…
策略模式 定义 定义一簇算法类,将每个算法分别封装起来,让他们可以互相替换,策略模式可以使算法的变化独立于使用它们的客户端 场景 使用策略模式,可以避免冗长的if-else 或 switch分支判断 实现 策略的定义 策略的定义需要定义一个策略接口和一组实现这个接口的策略类,因为所有的策略类都实现相同的接口 public interface Strategy{ void algorithm(); } public class ConcreteStrategyA implements Strate…
背景: 看多很多策略模式,总结下来实现原理大体都差不多,在这里主要是讲解下自己基于Spring更优雅的实现方案:这个方案主要是看了一些开源rpc和Spring相关源码后的一些思路,所以在此进行总结 首先看下比较常见的策略模式写法 一个接口或者抽象类,里面两个方法(一个方法匹配类型,一个可替换的逻辑实现方法) 不同策略的差异化实现(就是说,不同策略的实现类) 使用策略模式 1.3.1 一个接口,两个方法 public interface IFileStrategy { //属于哪种文件解析类型 F…
原创文章,同步发自作者个人博客,http://www.jasongj.com/design_pattern/strategy/ 策略模式介绍 策略模式定义 策略模式(Strategy Pattern),将各种算法封装到具体的类中,作为一个抽象策略类的子类,使得它们可以互换.客户端可以自行决定使用哪种算法. 策略模式类图 策略模式类图如下 策略模式角色划分 Strategy 策略接口或者(抽象策略类),定义策略执行接口 ConcreteStrategy 具体策略类 Context 上下文类,持有具…
来源:http://www.bjsxt.com/ 一.[GOF23设计模式]_策略模式.CRM中报价策略.GUI编程中布局管理器底层架构 package com.test.strategy; /** * 实现起来比较容易,符合一般开发人员的思路 * 假如,类型特别多,算法比较复杂时,整个条件语句的代码就变得很长,难于维护. * 如果有新增类型,就需要频繁地修改此处的代码! * 不符合开闭原则! */ public class TestStrategy { public double getPri…
多个if-else代码: @RunWith(SpringRunner.class) @SpringBootTest public class EducationalBackgroundTest { private int year = 6; @Test public void normalIfElse(){ if ( year == 6){ System.out.println("小学毕业"); }else if ( year == 9){ System.out.println(&qu…
strategy模式,即策略模式.个人觉得吧,策略模式更多的是一种思维方式. 首先我们要知道,为什么需要策略模式.举个例子,比如用程序输出今天下午去玩什么. PlayGame 玩游戏 package site.wangxin520.gof.strategy.demo; /** * 玩游戏的类 * @author wangXgnaw * */ public class PlayGame { /** * 玩游戏的方法 */ public void playGame(){ System.out.pri…
一.策略模式概述 策略模式对应于解决某一个问题的一个算法族,允许用户从该算法族中任选一种算法解决一个问题,同时可以方便的更换算法或者增加新的算法.并且由客户端决定调用哪个算法. 策略模式的本质: 分离算法,选择实现. 二.策略模式场景导入 某公司市场部在接单时根据不同的客户进行报价,可以划分为以下几种类型: (1)新客户小批量报价 (2)新客户大批量报价 (3)老客户小批量报价 (4)老客户大批量报价 当遇到这种情况时,可以采用策略模式实现. 三.使用普通方式实现报价操作 /** * 普通方式实…
在公司负责的就是订单取消业务,老系统中各种类型订单取消都是通过if else 判断不同的订单类型进行不同的逻辑.在经历老系统的折磨和产品需求的不断变更,决定进行一次大的重构:消灭 if else. 接下来就向大家介绍下是如何消灭 if else. 1. if else模式 @Service public class CancelOrderService { public void process(OrderDTO orderDTO) { int serviceType = orderDTO.ge…
前言: 之前写过一个工作中常见升级模式-策略模式 的文章,里面讲了具体是怎样使用策略模式去抽象现实中的业务代码,今天来拿出实际代码来写个demo,这里做个整理来加深自己对策略模式的理解.   一.业务流程 取消订单会有多种情况,比如:取消即时订单.取消预约订单.取消拼车订单   一般业务代码中我们会根据取消类型来进行不同的逻辑处理,代码中无外乎多了很多if else的业务逻辑,且代码耦合度很高.   那么有没有一种优雅的处理方式呢? 当然有了,现在就来说下我们系统中是如何处理这种问题的( 具体业…
策略设计模式是Java API库中常见的模式之一.这与另一个设计模式(称为状态设计模式)非常相似.本文是在学习完优锐课JAVA架构VIP课程—[框架源码专题]中<学习源码中的优秀设计模式>后写下的学习感悟.简要介绍了该思想,并提供了有关如何在Java中实现该思想的示例. 深入探索Java设计模式(一)之单例模式 总览 策略模式也称为策略模式.它被归类为行为软件设计模式,其中重点是在对象之间找到灵活的通信模式.它有助于在运行时对象之间建立灵活的通信. 策略模式 策略模式的基本思想是在类的较小层次…
1. SpringBoot结合策略模式实战套路 1.1. 前言 我们都知道设计模式好,可以让我们的代码更具可读性,扩展性,易于维护,但大部分程序猿一开始都学过至少一遍设计模式吧,实战中不知用到了几成.接下来让我介绍一个结合SpringBoot的策略模式套路,让你的代码少些if-else 1.2. 开撸 废话不多说,直接告诉你今天的核心是@autowired,看到这个是不是很熟悉,你每天都在用,不就是自动注入Spring管理的Bean吗?但我们对它的用法很多时候就局限在全局变量的注入了,忘记了,它…
一.需求 根据用户vip等级来返回不同的价格,vip等级是不固定的,随时可能要增加,价格也不是固定的. 二.常规的写法 /** * 如果有新增类型,就需要频繁的修改此处的代码! * 不符合开闭原则! * @author DUCHONG * */ public class CommonGetPrice { public static final String VIP1="v1"; public static final String VIP2="v2"; public…
策略模式: 使用常用,支付,之前做了微信支付,支付宝支付,然后另外一个同事写了一个银联支付,那么如果代码方法一起就会导致代码不是很好操作所以,采用策略模式进行,同事只需要写一个实现类,就可以了, 在协作过程中比较容易. 在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改.这种类型的设计模式属于行为型模式. 在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象.策略对象改变 context 对象的执行算法 意图:定义一…
经常听同事抱怨,订单来源又加了一种,代码又要加一层if-else判断,光判断订单来源的if-else就好几百行代码,代码我都不想看了,相信很多同行都有过这样的感受! Java的二十几种设计模式背的滚瓜烂熟,为什么这个时候不想着尝试用一下?说不定能轻松的解决掉哦 先说一下具体的需求: 公司推广入口很多,每一个下单来源在下单时都做特殊的逻辑处理,可能每两天就会加一个来源 一.传统的实现方式 那么按照传统的实现方式代码就是如下: public class OrderServiceImpl implem…
1.灵魂三问 接手前人(已跑路)项目快乐否? 前人项目不写注释懵逼否? 一个方法中一堆if/else,且业务判断条件用简单数字(或英文字母),不带注释,想打人否?     所以,对于上述三个问题,我写了此随笔,然而----然并卵     这篇文章并不能让你不接手前人项目,并不能让你看懂没有注释的业务代码,也并不能让你以后不碰到if/else轰击波,但是--系尬系     鲁迅先生曾倡导过,如果你觉得政府腐败,那么你就应该努力考取公务员从政,去内部解决腐败:如果你觉得你的家乡建设不够美丽,那么你应…
最近完成了我们公司的公众号开发,在微信消息路由选择的时候一开始都是用if-else 来判断,后面if-else月写越多显得十分的乱.在网上简单查了一下解决方法,果然有不少干货,感觉最经典最简洁的还是使用策略模式来重构过多的if-else 选择. 首先我们新建一个interface public interface InnerCommand { void process(String msg); }   然后把每一个if逻辑都单独抽取到一个类里面如 /** * @author lee. * @da…
策略模式 一.概念 1.理解策略模式 策略模式是一种行为型模式,它将对象和行为分开,将行为定义为 一个行为接口 和 具体行为的实现.策略模式最大的特点是行为的变化,行为之间可以相互替换. 每个if判断都可以理解为就是一个策略. 2.策略模式特点 策略模式把对象本身和行为区分开来,因此我们整个模式也分为三个部分. 1.抽象策略类(Strategy):策略的抽象,行为方式的抽象 2.具体策略类(ConcreteStrategy):具体的策略实现,每一种行为方式的具体实现. 3.环境类(Context…
前言 ​ 今天开始我们专题的第七课了.本章节将介绍:你写的代码中是否觉得很臃肿,程序中有大量的if...else,想优化代码,精简程序逻辑,提升代码的可读性,这章节将介绍如何通过委派模式.策略模式让你代码更优雅,消除程序大量冗余的代码.本章节参考资料书籍<Spring 5核心原理>中的第一篇 Spring 内功心法(Spring中常用的设计模式)(没有电子档,都是我取其精华并结合自己的理解,一个字一个字手敲出来的). 委派模式 委派模式的定义及应用场景 ​ 委派模式不属于GOF23种设计模式中…
策略模式是一种行为模式.用于某一个具体的项目有多个可供选择的算法策略,客户端在其运行时根据不同需求决定使用某一具体算法策略. 策略模式也被称作政策模式.实现过程为,首先定义不同的算法策略,然后客户端把算法策略作为它的一个参数.使用这种模式最好的例子是Collection.sort()方法了,它使用Comparator对象作为参数.根据Comparator接口不同实现,对象会被不同的方法排序. 本文例子是,完成一个简单地购物车,两种付款策略可供选择,一为信用卡,另外一种为Paypal. 首先创建策…
问题的提出 阅读别人代码的时候最讨厌遇到的就是大段大段的if-else分支语句,一般来说读到下面的时候就忘了上面在判断什么了.很多资料上都会讲到使用策略模式来改进这种代码逻辑. 策略模式的类图如下: 只需要按照这个图写代码就可以了. 策略模式代码的实现 借助Spring框架我们能够轻松的实现策略模式. 举一个简单的例子,我们去咖啡店买咖啡的时候,会根据自己的喜好和胃容量选择大小杯.那么我们就要实现一个CoffeeStategy: package com.example.demo.strategy…