天天看點

設計模式(二十二) 政策模式

有時候對象需要按照某種政策改變行為,我們可以利用政策模式,将政策或算法提取出來,作為單獨的類實作。使用政策模式,可以讓具體算法和應用對象分離,友善的根據不同條件替換政策。

下面舉一個例子。我們有一個電腦,它會按照快和慢兩種政策來計算結果。是以我們可以将政策封裝起來。

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));
    }
           

繼續閱讀