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号