大话设计模式笔记 策略模式

package strategy;

public abstract class CashSuper {
    // 现金收费抽象类
    public abstract double acceptCash(double money);
}
package strategy;

public class CashRebate extends CashSuper {

    private double moneyRebate = 1;

    // 打折收费类 默认1 既是不打折
    public CashRebate(double moneyRebate) {
        this.moneyRebate = moneyRebate;
    }

    @Override
    public double acceptCash(double money) {
        return money * moneyRebate;
    }

}
package strategy;

public class CashReturn extends CashSuper {

    // 返利条件 满
    private double moneyCondition = 0;
    // 返利多少
    private double moneyReturn = 0;

    public CashReturn(double moneyCondition, double moneyReturn) {
        this.moneyCondition = moneyCondition;
        this.moneyReturn = moneyReturn;
    }

    //我的理解是达到满300返利100,满600返利250,这种情况的
    @Override
    public double acceptCash(double money) {
        double result = money;
        if (money >= moneyCondition) {
            result = money - moneyReturn;
        }
        return result;
    }

}
package strategy;

public class CashContext {
    private CashSuper cs;

    public CashContext(String type) {
        switch (type) {
        case "打折":
            CashRebate cs0=new CashRebate(0.8);
            cs=cs0;
            break;
        case "满300返100":
            CashReturn cr1=new CashReturn(300, 100);
            cs=cr1;
            break;

        }
    }
    
    public double GetResult(double money){
        return cs.acceptCash(money);
    }
}
package strategy;

public class Test {
    public static void main(String[] args) {
        double total=0;
        CashContext csuper=new CashContext("打折");
        double money=100;
        total=csuper.GetResult(money);
        System.out.println(total);
    }
}

感觉策略模式和简单工厂差不多的样子,一个工厂类用静态方法类传参生成对象,一个用构成方法传参数生成对象。

个人倾向于静态方法类传参生成对象,没必要的对象可以不用生成。

原文地址:https://www.cnblogs.com/linkarl/p/4776111.html