Java怎么优雅的使用策略模式


本篇内容介绍了“Java怎么优雅的使用策略模式”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!策略模式是一种行为型模式,它将对象和行为分开,将行为定义为 一个行为接口 和 具体行为的实现。策略模式最大的特点是行为的变化,行为之间可以相互替换。每个if判断都可以理解为就是一个策略。本模式使得算法可独立于使用它的用户而变化。简单理解就是,针对不同的场景,使用不同的策略进行处理。Strategy 接口定义了一个算法族,它们都实现了 behavior() 方法。Context 是使用到该算法族的类,其中的 doSomething() 方法会调用 behavior(),setStrategy(Strategy) 方法可以动态地改变 strategy 对象,也就是说能动态地改变 Context 所使用的算法。如果在一个系统里面有许多类,它们之间的区别仅在于它们 的行为,那么使用策略模式可以动态地让一个对象在许多行 为中选择一种行为。一个系统需要动态地在几种算法中选择一种。如果一个对象有很多的行为,如果不用恰当的模式,这些行 为就只好使用多重的条件选择语句来实现。不希望客户端知道复杂的、与算法相关的数据结构,在具体策略类中封装算法和相关的数据结构,提高算法的保密性与安全性。生活中比较常见的应用模式有:电商网站支付方式,一般分为银联、微信、支付宝,可以采用策略模式。电商网站活动方式,一般分为满减送、限时折扣、包邮活动,拼团等可以采用策略模式。场景:最近太热了,想要降降温,有什么办法呢首先,定义一个降温策略的接口定义3种降温策略;实现策略接口定义一个降温策略的上下文测试运行结果:使用风扇降温
使用空调降温
使用冰块降温以上就是一个策略模式的简单实现模拟在购买商品时候使用的各种类型优惠券(满减、直减、折扣、n元购)这个场景几乎也是大家的一个日常购物省钱渠道,购买商品的时候都希望找一些优惠券,让购买的商品更加实惠。而且到了免费云主机域名大促的时候就会有更多的优惠券需要计算那些商品一起购买更加优惠!
*优惠券类型;
*1.直减券
*2.满减券
*3.折扣券
*4.n元购
*/
publicclassCouponDiscountService{

publicdoublediscountAmount(inttype,doubletypeContent,doubleskuPrice,doubletypeExt){
//1.直减券
if(1==type){
returnskuPrice-typeContent;
}
//2.满减券
if(2==type){
if(skuPrice
以上是不同类型的优惠券计算折扣后的实际金额。入参包括;优惠券类型、优惠券金额、商品金额,因为有些优惠券是满多少减少多少,所以增加了typeExt类型。这也是方法的不好扩展性问题。最后是整个的方法体中对优惠券抵扣金额的实现,最开始可能是一个最简单的优惠券,后面随着产品功能的增加,不断的扩展if语句。实际的代码可能要比这个多很多整体的结构模式并不复杂,主要体现的不同类型的优惠券在计算优惠券方式的不同计算策略。这里包括一个接口类(ICouponDiscount)以及四种优惠券类型的实现方式。最后提供了策略模式的上下控制类处理,整体的策略服务。优惠券接口定义了优惠券折扣接口,也增加了泛型用于不同类型的接口可以传递不同的类型参数。接口中包括商品金额以及出参返回最终折扣后的金额,这里在实际开发中会比现在的接口参数多一些,但核心逻辑是这些。优惠券接口实现满减直减折扣N元购以上是四种不同类型的优惠券计算折扣金额的策略方式,可以从代码中看到每一种优惠方式的优惠金额。策略控制类策略模式的控制类主要是外部可以传递不同的策略实现,在通过统一的方法执行优惠策略计算。另外这里也可以包装成map结构,让外部只需要对应的泛型类型即可使用相应的服务。测试以上四组测试分别验证了不同类型优惠券的优惠策略,测试结果是满足我们的预期。这里四种优惠券最终都是在原价100元上折扣10元,最终支付90元。“Java怎么优雅的使用策略模式”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注百云主机网站,小编将为大家输出更多高质量的实用文章!

相关推荐: Javascript数据结构之栈和队列怎么实现

本篇内容主要讲解“Javascript数据结构之栈和队列怎么实现”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Javascript数据结构之栈和队列怎么实现”吧!栈是一种具有 「后入先出」(Last-in-Firs…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

Like (0)
Donate 微信扫一扫 微信扫一扫
Previous 05/15 12:35
Next 05/15 12:36

相关推荐