策略模式: 定义一系列的算法,把他们一个个封装起来,并且使它们可互相替换。
/**
* 定义一系列的算法,把他们一个个封装起来,并且使它们可互相替换。
* @describe
* 抽象角色定义算法的 骨架
*
* @time 2014-7-9 上午10:29:33
*/
public interface Strategy {
public double calcPrice(double goodsPrice);
}
public class LargeCustomerStrategy implements Strategy{
@Override
public double calcPrice(double goodsPrice) {
System.out.println("大客户折扣10%");
return goodsPrice*(1-0.1);
}
}
/**
* 算法的具体实现
* @describe
*
*
* @time 2014-7-9 下午04:40:18
*/
public class NormalCustomerStrategy implements Strategy{
@Override
public double calcPrice(double goodsPrice) {
System.out.println("对于新客户或者普通客户,没有折扣");
return goodsPrice;
}
}
public class OldCustomerStrategy implements Strategy{
@Override
public double calcPrice(double goodsPrice) {
System.out.println("对于老客户,折扣5%");
return goodsPrice*(1-0.05);
}
}
/**
* 封装了变化部分(算法的实现) 用户只需要访问这个封装的角色就行了
* @describe
*
*
* @time 2014-7-9 下午04:38:32
*/
public class Price {
private Strategy strategy = null;
public Price(Strategy strategy) {
this.strategy = strategy;
}
public double quote(double goodsPrice) {
return this.strategy.calcPrice(goodsPrice);
}
}
public class Client {
public static void main(String[] args) {
Strategy sty = new LargeCustomerStrategy();
Price ctx = new Price(sty);
double quote = ctx.quote(1000);
System.out.println(quote);
}
}