有時候對象需要按照某種政策改變行為,我們可以利用政策模式,将政策或算法提取出來,作為單獨的類實作。使用政策模式,可以讓具體算法和應用對象分離,友善的根據不同條件替換政策。
下面舉一個例子。我們有一個電腦,它會按照快和慢兩種政策來計算結果。是以我們可以将政策封裝起來。
public interface Strategy {
double cal(double a, double b);
}
class FastStrategy implements Strategy {
@Override
public double cal(double a, double b) {
return (a + b) / 2;
}
}
class SlowStrategy implements Strategy {
@Override
public double cal(double a, double b) {
return Math.sqrt(a * b);
}
}
然後電腦就可以應用不同的政策來計算結果了。
public class Calculator {
private Strategy strategy;
public void setStrategy(Strategy strategy) {
this.strategy = strategy;
}
public double calc(double a, double b) {
return strategy.cal(a, b);
}
}
之後,我們隻要将政策傳遞給電腦,就可以按照政策來計算了。
public void run() {
Strategy fast = new FastStrategy();
Strategy slow = new SlowStrategy();
Calculator calculator = new Calculator();
calculator.setStrategy(fast);
System.out.println("fast result:" + calculator.calc(3, 4));
calculator.setStrategy(slow);
System.out.println("slow result:" + calculator.calc(3, 4));
}