策略模式:策略模式是方便类的扩展和管理
比如新老顾客打折的问题
策略类
package com.dasenlin.ccn;
public interface Strategy {
public double getPrice(double standlardPrice);
}
上下文类
package com.dasenlin.ccn;
public class Context {
private Strategy strategy;
public Context(Strategy strategy) {
super();
this.strategy = strategy;
}
//没有spring的时候的一种注入
public void setStrategy(Strategy strategy){
this.strategy = strategy;
}
public void printlnPrice(double s){
System.out.println("你的报价是"+strategy.getPrice(s));
}
}
几个不同顾客的策略
1
package com.dasenlin.ccn;
/**
* 测试的是新的策略类
* @author Administrator
*
*/
public class NewCustomerFewStrategy implements Strategy {
@Override
public double getPrice(double standlardPrice) {
System.out.println("原价不打折");
return standlardPrice;
}
}
2
package com.dasenlin.ccn;
/**
* 测试的是新的策略类
* @author Administrator
*
*/
public class NewCustomerManyStrategy implements Strategy {
@Override
public double getPrice(double standlardPrice) {
System.out.println("打九折");
return standlardPrice*0.9;
}
}
3
package com.dasenlin.ccn;
/**
* 测试的是新的策略类
* @author Administrator
*
*/
public class OldCustomerFewStrategy implements Strategy {
@Override
public double getPrice(double standlardPrice) {
System.out.println("打八五折");
return standlardPrice*0.85;
}
}
4
package com.dasenlin.ccn;
/**
* 测试的是新的策略类
* @author Administrator
*
*/
public class OldCustomerManyStrategy implements Strategy {
@Override
public double getPrice(double standlardPrice) {
System.out.println("打八折");
return standlardPrice*0.8;
}
}
测试
package com.dasenlin.ccn;
public class Client {
public static void main(String[] args) {
Strategy oldfew =new OldCustomerFewStrategy();
Context con = new Context(oldfew);
con.printlnPrice(1000.00);
}
}