java设计模式之策略模式(二)
之前的博文中使用一个订单价格根据用户类型进行打折计算总价的例子来展示的策略模式。
其实策略本身就是一种计算方式,这种场景最适合使用函数式编程。
接下来我们就利用函数式编程重构一下上一篇《java设计模式之策略模式》中的案例。
首先定义一个用户枚举类型,不同的类型有不同的打折模式。
注意我们的枚举括号内的参数,不再是一个类,而是变成了一个纯函数。它接受一个Double类型,并返回另一个Double类型。
public enum CustomerType { COMMON(origin -> origin), MEMBER(origin -> 0.9 * origin), VIP(origin -> 0.8 * origin); private final DoubleFunction<Double> strategy; CustomerType(DoubleFunction<Double> strategy) { this.strategy = strategy; } public DoubleFunction<Double> getStrategy() { return strategy; } }
订单类
@Data public class Order { private double amount; private CustomerType customerType; /** * 计算总价 * @param originPrice 原生价格 * @param strategy 折扣策略 * @return 折扣后价格 */ Double calculatePrice(Double originPrice, DoubleFunction<Double> strategy) { return strategy.apply(originPrice); } }
简化后的订单类很简单,只包含两个属性,一个是订单总价,另一个是订单对应的用户类型。
只有一个方法,calculatePrice,用了计算订单总价。
方法实现也很简单,这就是函数式编程的魅力所在。
个人函数式编程的核心不在于函数本身,毕竟面向对象中到处都有函数,而是在于函数可以作为一个一级对象存在,可以是另一个函数的参数。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性