我是靠谱客的博主 害羞饼干,最近开发中收集的这篇文章主要介绍大话设计模式-笔录2-策略模式,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

设计模式—策略模式

    • 描述
    • 代码

描述

学习笔录,不足之处大神多多指教。
策略模式定义了一系列的算法,并将每一个算法封装起来,使每个算法可以相互替代,使算法本身和使用算法的客户端分割开来,相互独立。

代码

场景:商场收银体系(正常收费、折扣、满减)
1.父类

public 

interface CashSuper {

    /**
     * 获取金额
     *
     * @param cashContext
     * @return
     */
    double acceptCash(CashContext cashContext);

}

2.正常、折扣、满减

public class CashNormal implements CashSuper {

    @Override
    public double acceptCash(CashContext cashContext) {
        return cashContext.getMoney();
    }

}
public class CashRebate implements CashSuper {

    private double moneyRebate;

    public CashRebate(String moneyRebate) {
        this.moneyRebate = Double.parseDouble(moneyRebate);
    }

    @Override
    public double acceptCash(CashContext cashContext) {
        return cashContext.getMoney() * moneyRebate;
    }

}
public class CashReturn implements CashSuper {

    /**
     * 条件
     */
    private double moneyCondition;

    /**
     * 满减
     */
    private double moneyReturn;

    public CashReturn(String condition, String returnData) {
        this.moneyCondition = Double.parseDouble(condition);
        this.moneyReturn = Double.parseDouble(returnData);
    }

    @Override
    public double acceptCash(CashContext cashContext) {
        double result = cashContext.getMoney();
        if (result > moneyCondition) {
            result = result - Math.floor(cashContext.getMoney() / moneyCondition) * moneyReturn;
        }
        return result;
    }
}

3、上下文

@Data
public class CashContext {

    private CashSuper cashSuper;

    private double money;

    public CashContext(String money) {
        this.money = Double.parseDouble(money);
        cashSuper = new CashNormal();
    }

    public CashContext(String money, String moneyRebate) {
        this.money = Double.parseDouble(money);
        cashSuper = new CashRebate(moneyRebate);
    }

    public CashContext(String money, String condition, String returnData) {
        this.money = Double.parseDouble(money);
        cashSuper = new CashReturn(condition, returnData);
    }


    public double getResult() {
        return cashSuper.acceptCash(this);
    }


}

3、调用

public class StrategyOperate {

    public static void main(String[] args) {
        getResult();
    }

    private static void getResult() {
        CashContext cashContext;
        // 正常收费
        cashContext = new CashContext("300");
        System.out.println(cashContext.getResult());
        // 折扣
        cashContext = new CashContext("300", "0.8");
        System.out.println(cashContext.getResult());
        // 满减
        cashContext = new CashContext("300", "200", "10");
        System.out.println(cashContext.getResult());
    }

}

简单工厂和策略模式区别在哪里?

小心上面代码中的 Bug;我只知道这些代码是正确的,但没有试过。

最后

以上就是害羞饼干为你收集整理的大话设计模式-笔录2-策略模式的全部内容,希望文章能够帮你解决大话设计模式-笔录2-策略模式所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(33)

评论列表共有 0 条评论

立即
投稿
返回
顶部