策略模式

两盒软妹~` 提交于 2019-12-05 12:43:48

策略模式

一、定义:定义一组算法,将每个算法封装起来,并且他们可以相互替换。

二、特点:行为型模式,封装各种类型的规则,降低算法类和使用算法类之间的耦合。

三、示例代码,商场的优惠活动,有两种优惠方式,一种是打8折,一种是满500价格减少50。利用了简单工程模式和策略模式相结合。

//抽象算法类,定义所有支持的算法的公共接口。public abstract class CashSuper {​     abstract double getResult(double price);​}​
//具体的算法实现类,打折算法。public class CashRebate extends CashSuper {    double rebate;​    public CashRebate(double rebate) {        this.rebate = rebate;    }​    @Override    double getResult(double price) {        double result;        result = price * (int) (rebate / 10);        return result;    }​​}
//具体的算法实现类,返现算法。public class CashReturn extends CashSuper {​    double condition = 0;    double returnMoney=0;​    public CashReturn(double condition, double returnMoney) {        this.condition = condition;        this.returnMoney = returnMoney;    }​    double getResult(double price) {        double result;        int w = (int) (condition / returnMoney);        result = price - w * returnMoney;        return result;    }}​
//上下文public class Context {    //声明策略对象    CashSuper cashSuper;//利用简单工厂模式创建具体的cashSuper实现类    public Context(String type) throws Exception {​        switch (type) {            case "rebate":                cashSuper = new CashRebate(8);                break;            case "return":                cashSuper = new CashReturn(500, 60);                break;            default:                throw new Exception("没有所需的类型");​        }    }//利用策略模式,根据具体的策略对象来选择不同的算法。    public double ContextInterface(double price) {        return cashSuper.getResult(price);    }​}
//客户端public class Client {​    public static void main(String[] args) throws Exception {​        double totalPrice = 1000;        String type = "return";        Context context = new Context(type);        totalPrice = context.ContextInterface(totalPrice);        System.out.println(totalPrice);​    }}​
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!