策略模式

Posted 仙人掌的刺

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了策略模式相关的知识,希望对你有一定的参考价值。

策略模式封装了变化。

标准策略模式:

 

/**
 * Created by hero on 16-3-29.
 */
public abstract class CashSuper {
    public abstract double acceptCash(double money);
}
/**
 * Created by hero on 16-3-29.
 */
public class CashNormal extends CashSuper{
    @Override
    public double acceptCash(double money) {
        return money;
    }
}
/**
 * Created by hero on 16-3-29.
 */
public class CashRebate extends CashSuper {
    private double moneyRebate = 1d;

    public double getMoneyRebate() {
        return moneyRebate;
    }

    public void setMoneyRebate(double moneyRebate) {
        if (moneyRebate < 0) {
            throw new IllegalArgumentException("what‘s wrong with this supermarket?!!!");
        }
        this.moneyRebate = moneyRebate;
    }

    public CashRebate(double moneyRebate) {
        this.setMoneyRebate(moneyRebate);
    }

    @Override
    public double acceptCash(double money) {
        return getMoneyRebate() * money;
    }
}
/**
 * Created by hero on 16-3-29.
 */
public class CashContext {
    private CashSuper cashSuper = null;

    public CashContext(CashSuper cashSuper) {
        this.cashSuper = cashSuper;
    }

    public double getResult(double money) {
        return cashSuper.acceptCash(money);
    }
}
public class Main {

    public static void main(String[] args) {
        CashContext cashContext = null;
        cashContext = new CashContext(new CashNormal());
        System.out.println(cashContext.getResult(12));
        cashContext = new CashContext(new CashRebate(0.3));
        System.out.println(cashContext.getResult(12));
    }
}

 

策略与简单工厂结合:

简单工厂模式对类似“满300减200、满400减100”的变化进行有效封装,除非另外制定一套规则比如:“满减-400,100、满减-500,100”,在swich语句中只取‘-’之前的作case条件,其后跟参数,多个参数以

‘,’分割。

策略与简单工厂的结合使后端对前端的暴露降低了。算是集成了二者的优点吧。

以上是关于策略模式的主要内容,如果未能解决你的问题,请参考以下文章

Redis实现分布式锁(设计模式应用实战)

用于从 cloudkit 检索单列的代码模式/片段

代码片-策略模式+工厂模式

代码片-策略模式+工厂模式

代码片-策略模式+工厂模式

代码片-策略模式+工厂模式