• 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,用了计算订单总价。

    方法实现也很简单,这就是函数式编程的魅力所在。

    个人函数式编程的核心不在于函数本身,毕竟面向对象中到处都有函数,而是在于函数可以作为一个一级对象存在,可以是另一个函数的参数。

  • 相关阅读:
    OpenStack最新版本Folsom架构解析
    三种存储类型比较-文件、块、对象存储
    4椭圆曲线密码学:破坏安全性及与RSA的比较
    3椭圆曲线密码学:ECDH和ECDSA
    2椭圆曲线密码学:有限域和离散对数
    1椭圆曲线密码学:简介
    区块链部署
    PBFT算法流程
    Raft和PBFT算法对比
    【P2P网络中的声誉计算】The EigenTrust Algorithm for Reputation Management in P2P Networks
  • 原文地址:https://www.cnblogs.com/wangbin2188/p/16635105.html
Copyright © 2020-2023  润新知