鍍金池/ 教程/ Java/ Java策略模式
Java前端控制器模式
Java工廠設(shè)計模式
Java抽象工廠模式
Java觀察者模式
Java門面模式(或外觀模式)
Java備忘錄模式
Java MVC模式
Java單例模式
Java傳輸對象模式
Java迭代器模式
Java責(zé)任鏈模式
Java命令模式
Java原型模式
Java解釋器模式
Java適配器模式
Java狀態(tài)模式
Java中介者模式(Mediator Pattern)
Java攔截過濾器模式
Java策略模式
Java組合模式
Java業(yè)務(wù)代理模式
Java裝飾模式
Java模板模式
Java橋接模式
Java過濾器模式(條件模式)
Java享元模式(Flyweight Pattern)
Java建造者(Builder)模式
Java設(shè)計模式
Java空對象模式
Java數(shù)據(jù)訪問對象模式
Java訪問者模式
Java組合實體模式
Java服務(wù)定位器模式

Java策略模式

在策略模式中,可以在運行時更改類行為或其算法。 這種類型的設(shè)計模式屬于行為模式。

在策略模式中,創(chuàng)建表示各種策略對象和其行為根據(jù)其策略對象而變化的上下文對象。 策略對象更改上下文對象的執(zhí)行算法。

實現(xiàn)實例

在這個示例中,將創(chuàng)建一個 Strategy 接口,定義實現(xiàn)策略接口的操作和具體策略類。 上下文類- Context 是使用策略的類。

StrategyPatternDemo是一個演示類,將使用上下文- Context 和策略對象來演示上下文行為基于其部署或使用的策略的變化。

策略模式示例的結(jié)構(gòu)如下圖所示 -

第1步

創(chuàng)建一個類接口,其代碼如下 -
Strategy.java

public interface Strategy {
   public int doOperation(int num1, int num2);
}

第2步

創(chuàng)建三個實現(xiàn)相同接口的具體類。其代碼分別如下 -
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;
   }
}

創(chuàng)建上下文(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);
   }
}

第3步

使用上下文- Context 在更改其策略時查看行為更改。
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));
   }
}

第4步

驗證輸出,執(zhí)行上面的代碼得到以下結(jié)果 -

10 + 5 = 15
10 - 5 = 5
10 * 5 = 50