《大话设计模式》第二章
package ch02;
public interface Strategy {
int compute(int money);
}
package ch02;
/**
* 七折
* @author Administrator
*
*/
public class ConcreteStrategy70 implements Strategy {
public int compute(int money) {
return (int)(money * 0.7);
}
}
package ch02;
/**
* 八折
* @author Administrator
*
*/
public class ConcreteStrategy80 implements Strategy {
public int compute(int money) {
return (int)(money *0.8);
}
}
package ch02;
/**
* 不打折
* @author Administrator
*
*/
public class ConcreteStrategyNormal implements Strategy {
public int compute(int money) {
return money;
}
}
package ch02;
public class StrategyFactory {
public static Strategy createStrategy(int num) {
Strategy strategy = null;
switch (num) {
case 7:
strategy = new ConcreteStrategy70();
break;
case 8:
strategy = new ConcreteStrategy80();
break;
default:
strategy = new ConcreteStrategyNormal();
break;
}
return strategy;
}
}
package ch02;
public class Context {
private Strategy strategy = null;
public Context(Strategy strategy) {
this.strategy = strategy;
}
public int cumpute(int money) {
return strategy.compute(money);
}
}
package ch02;
/**
* 策略模式,因为打折的算法不同,于是用每个类实现一个算法
* @author Administrator
*
*/
public class Client {
/**
* @param args
*/
public static void main(String[] args) {
Strategy strategy = StrategyFactory.createStrategy(7);
Context context = new Context(strategy);
System.out.println(context.cumpute(100));
}
}
看看代码,运行一下,应该能理解。另外,JDK中的java.util.Comparator,是策略模式的经典例子。