java设计模式--策略模式

 //设计模式主要方便应用的扩展,和代码的解耦   拿一个商场促销的活动作为例子

    /*
    * 商场根据不同用户有不用的折扣计算, 如:新用户有10元免费优化,  老用户9折等等。这里写简单些 可以达到思想的效果就可以
    *
    * 分析步骤:
    * 1. 首先每种用户都有计算价钱的方法 只是方法里面的实现不一样  因此将方法抽象出来
    * 2. 每个方法根据不同的打折优惠策略进行计算价钱。
    * 3. 在实际计算的时候根据不同种类获取不同的计算方式。
    *    直接上代码、、
    * */

/**
 * @author huzhongkang
 * @Title: ${file_name}
 * @date 2020/5/2918:24
 */
public interface Calculator {

    /**
     * 统一的算账接口
     * @param price 原始的price价钱
     * @return
     */
    BigDecimal account(BigDecimal price);

}


/**
 * @author huzhongkang
 * @Title: ${file_name}
 * @date 2020/5/2918:26
 */
public class NewUserCalcultor implements Calculator {

    //新用户满50减10元
    @Override
    public BigDecimal account(BigDecimal price) {
        if (price.compareTo(BigDecimal.valueOf(50)) >= 0) {
            return price.subtract(BigDecimal.valueOf(10));
        }
        return price;
    }
}


/**
 * @author huzhongkang
 * @Title: ${file_name}
 * @date 2020/5/2918:33
 */
public class OldUserCalcultor implements Calculator {

    //老用户9折优惠
    @Override
    public BigDecimal account(BigDecimal price) {
        BigDecimal multiply = price.multiply(new BigDecimal(0.9));
        return multiply;
    }

}


/**
 * @author huzhongkang
 * @Title: ${file_name}
 * @date 2020/5/2918:35
 */
public class StrategyUtil {
    //策略分配器,用来分配不停尝尽的中转器

    //优惠前的价格
    private BigDecimal price;

    //策略分配计算器
    private Calculator calculator;

    /**
     * 提交订单计算价格
     */
    public BigDecimal subOrder(){
        return calculator.account(this.price);
    }


    public BigDecimal getPrice() {
        return price;
    }

    public void setPrice(BigDecimal price) {
        this.price = price;
    }

    public Calculator getCalculator() {
        return calculator;
    }

    public void setCalculator(Calculator calculator) {
        this.calculator = calculator;
    }
}



   //设计模式主要方便应用的扩展,和代码的解耦   拿一个商场促销的活动作为例子

    /*
    * 商场根据不同用户有不用的折扣计算, 如:新用户有10元免费优化,  老用户9折等等。这里写简单些 可以达到思想的效果就可以
    *
    * 分析步骤:
    * 1. 首先每种用户都有计算价钱的方法 只是方法里面的实现不一样  因此将方法抽象出来
    * 2. 每个方法根据不同的打折优惠策略进行计算价钱。
    * 3. 在实际计算的时候根据不同种类获取不同的计算方式。
    *    直接上代码、、
    * */

    public static void main(String[] args) {
        //1 来了一个新用户花了60块
        StrategyUtil strategyUtil = new StrategyUtil();
        strategyUtil.setPrice(BigDecimal.valueOf(60));
        NewUserCalcultor newUserCalcultor = new NewUserCalcultor();
        strategyUtil.setCalculator(newUserCalcultor);
        BigDecimal bigDecimal = strategyUtil.subOrder();
        System.out.println("new User 花了" + bigDecimal.doubleValue());

        //老用户花了100块
        strategyUtil.setPrice(BigDecimal.valueOf(100));
        OldUserCalcultor oldUserCalcultor = new OldUserCalcultor();
        strategyUtil.setCalculator(oldUserCalcultor);
        System.out.println("old User 消费:" + strategyUtil.subOrder().doubleValue());
    }

}


new User 花了50.0
old User 消费:90.0

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值