天天看點

政策模式定義實作

定義

在政策模式(Strategy Pattern)中,一個類的行為或其算法可以在運作時更改。這種類型的設計模式屬于行為型模式。

在政策模式中,我們建立表示各種政策的對象和一個行為随着政策對象改變而改變的 context 對象。政策對象改變 context 對象的執行算法。

實作

我們将建立一個定義活動的 Strategy 接口和實作了 Strategy 接口的實體政策類。Context 是一個使用了某種政策的類。

StrategyPatternDemo,我們的示範類使用 Context 和政策對象來示範 Context 在它所配置或使用的政策改變時的行為變化。

政策模式定義實作

政策模式的 UML 圖

步驟 1
建立一個接口。
Strategy.java
public interface Strategy {
   public int doOperation(int num1, int num2);
}
步驟 2
建立實作接口的實體類。
OperationAdd.java
public class OperationAdd implements Strategy{
   @Override
   public int doOperation(int num1, int num2) {
      return num1 + num2;
   }
}
OperationSubstract.java
public class OperationSubstract implements Strategy{
   @Override
   public int doOperation(int num1, int num2) {
      return num1 - num2;
   }
}
OperationMultiply.java
public class OperationMultiply implements Strategy{
   @Override
   public int doOperation(int num1, int num2) {
      return num1 * num2;
   }
}
步驟 3
建立 Context 類。
Context.java
public class Context {
   private Strategy strategy;

   public Context(Strategy strategy){
      this.strategy = strategy;
   }

   public int executeStrategy(int num1, int num2){
      return strategy.doOperation(num1, num2);
   }
}
步驟 4
使用 Context 來檢視當它改變政策 Strategy 時的行為變化。
StrategyPatternDemo.java
public class StrategyPatternDemo {
   public static void main(String[] args) {
      Context context = new Context(new OperationAdd());        
      System.out.println("10 + 5 = " + context.executeStrategy(10, 5));

      context = new Context(new OperationSubstract());      
      System.out.println("10 - 5 = " + context.executeStrategy(10, 5));

      context = new Context(new OperationMultiply());       
      System.out.println("10 * 5 = " + context.executeStrategy(10, 5));
   }
}
步驟 5
驗證輸出。
10 + 5 = 15
10 - 5 = 5
10 * 5 = 50
           

繼續閱讀