Uml图:
策略:
public interface ComputableStrategy {
public abstract double computeScore( double [] a);
}
具体策略:
public class StrataegyOne implements ComputableStrategy {
@Override
public double computeScore(double[] a) {
double score=0,sum=0;
for (int i = 0; i < a.length; i++) {
sum+=a[i];
}
score=sum/a.length;
return score;
}
}
上下文:
public class GymnasticsGame {
ComputableStrategy strategy;
public void setStrategy(ComputableStrategy strategy) {
this.strategy=strategy;
}
public double getPersonScore(double[] a) {
if (strategy!=null) {
return strategy.computeScore(a);
}
else {
return 0;
}
}
}
策略模式使用:
public class Application {
public static void main(String[] args) {
double[] a = { 1, 5, 7.9, 9.8 };
double[] b = { 3, 5, 6, 9, 9.7 };
GymnasticsGame game = new GymnasticsGame();// 上下文对象
game.setStrategy(new StrataegyOne());// 使用策略1
System.out.println("使用策略1");
System.out.println(game.getPersonScore(a));
System.out.println(game.getPersonScore(b));
System.out.println("使用策略2");
game.setStrategy(new StrategyTwo());// 使用策略1
System.out.println(game.getPersonScore(a));
System.out.println(game.getPersonScore(b));
}
}