策略模式簡述

我覺得設計模式這東西,最好還是反覆看看書,推薦Head First我也是看這個的(https://pan.baidu.com/s/1x0aiZHEz_UMa_fKa8QNWbg       ----    njh1)

嗯,不用謝。

標準的定義是:策略模式定義了算法族,分別封裝起來,讓他們之間可以互相替換,此模式讓算法的變化獨立於使用算法的客戶

簡單來講就是有好幾個算法,他就是用來決定使用哪一套的

類圖就醬紫啦

代碼如下:

package cn.bl.strategy;

/**
 * @Deacription 使用策略
 * @Author BarryLee
 * @Date 2019/9/22 16:21
 */
public class Main {
  public static void main(String[] args) {
    Context context = new Context();
    context.setStrategy(new ConcreteStrategyA());
    context.algorithm();

    context.setStrategy(new ConcreteStrategyB());
    context.algorithm();
  }
}
package cn.bl.strategy;

/**
 * 策略接口
 */
public interface Strategy {
  /**
   * 策略方法
   */
  void algorithm();
}
package cn.bl.strategy;

/**
 * @Deacription 環境類
 * @Author BarryLee
 * @Date 2019/9/22 16:21
 */
public class Context {

  // 策略是私有的
  private Strategy strategy;

  // 獲取策略方法
  public Strategy getStrategy() {
    return strategy;
  }

  // 設置策略
  public void setStrategy(Strategy strategy) {
    this.strategy = strategy;
  }

  // 調用策略
  public void algorithm() {
    strategy.algorithm();
  }
}
package cn.bl.strategy;

/**
 * @Deacription 具體策略類A
 * @Author BarryLee
 * @Date 2019/9/22 16:21
 */
public class ConcreteStrategyA implements Strategy{
  @Override
  public void algorithm() {
    System.out.println("strategy A");
  }
}
package cn.bl.strategy;

/**
 * @Deacription 具體策略類B
 * @Author BarryLee
 * @Date 2019/9/22 16:22
 */
public class ConcreteStrategyB implements Strategy{
  @Override
  public void algorithm() {
    System.out.println("strategy B");
  }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章