2.策略模式
商场实现打折促销
0.UML图

1.抽象类,定义所有支持的打折促销方式算法的公共接口
/**
 * @author makex
 * @note 打折抽象类,定义所有支持的算法公共接口
 * @create 2017-06-12
 */
public abstract class CashSuper {
    public abstract double accepptCash(double money);
}
2.下面三个子类具体实现打折促销算法
/**
 * @author makex
 * @note 正常收费子类
 * @create 2017-06-12
 */
public class CashNomal extends CashSuper {
    @Override
    public double accepptCash(double money) {
        return money;
    }
}
/**
 * @author makex
 * @note 打折收费子类
 * @create 2017-06-12
 */
public class CashRebate extends CashSuper {
    private double moneyrebate = 1d;
    public CashRebate(double moneyrebate) {
        this.moneyrebate = moneyrebate;
    }
    @Override
    public double accepptCash(double money) {
        return this.moneyrebate * money;
    }
}
/**
 * @author makex
 * @note 返利收费子类
 * @create 2017-06-12
 */
public class CashReturn extends CashSuper {
    private double moneyCondition  = 0.0d;
    private double moneyReturn = 0.0d;
    public CashReturn(double moneyCondition, double moneyReturn) {
        this.moneyCondition = moneyCondition;
        this.moneyReturn = moneyReturn;
    }
    @Override
    public double accepptCash(double money) {
        if(money >= moneyCondition)
            money  = money - Math.floor(money / moneyCondition) * moneyReturn;
        return money;
    }
}
3.使用一个Context来配置策略,维护一个对打折促销子类对象的引用
/**
 * @author makex
 * @note 配置ContextStrategy,维护一个对Strategy对象的引用
 * @create 2017-06-12
 */
public class CashContext {
    private CashSuper cashSuper;
    public CashContext(CashSuper cashSuper) {
        this.cashSuper = cashSuper;
    }
    public double getResult(double monney){
        return cashSuper.accepptCash(monney);
    }
}
4.测试类
/**
 * @author makex
 * @note 策略模式测试类
 * @create 2017-06-12
 */
public class TestClass {
    public static void main(String[] args) {
        CashContext context = new CashContext(new CashNomal());
        context.getResult(100);
        System.out.println("正常收费:"+context.getResult(100));
        context = new CashContext(new CashRebate(0.8));
        context.getResult(100);
        System.out.println("打8折:"+context.getResult(100));
        context = new CashContext(new CashReturn(300,100));
        context.getResult(300);
        System.out.println("满300返100:"+context.getResult(300));
    }
}
    http://www.cnblogs.com/makexu/

 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号