設計模式之策略模式

策略模式【Strategy Pattern】

劉備要到江東娶老婆了,走之前諸葛亮給趙雲(伴郎)三個錦囊妙計,說是按天機拆開解決棘手問題, 嘿,還別說,真是解決了大問題,搞到最後是周瑜陪了夫人又折兵呀,那咱們先看看這個場景是什麼樣子 的。 先說這個場景中的要素:三個妙計,一個錦囊,一個趙雲,妙計是小亮同志給的,妙計是放置在錦囊 裏,俗稱就是錦囊妙計嘛,那趙雲就是一個幹活的人,從錦囊中取出妙計,執行,然後獲勝,用JAVA 程序

怎麼表現這個呢?我們先看類圖:



既然三個妙計都是同一個類型的,那麼我們首先定一個策略接口,

public interface IStrategy {

//每個錦囊妙計都是一個可執行的算法
public void operate();

}

然後分別定義三個妙計的實現類,

1.

public class BackDoor implements IStrategy {

public void operate() {

    System.out.println("找喬國老幫忙,讓吳國太給孫權施加壓力");

}

}

2.

public class BlockEnemy implements IStrategy {

public void operate() {

    System.out.println("孫夫人斷後,擋住追兵");
    }

 }

3.

public class GivenGreenLight implements IStrategy {

public void operate() {
    // TODO Auto-generated method stub
    System.out.println("求吳國太開個綠燈,放行!");
}

}

好了,大家看看,三個妙計是有了,那需要有個地方放這些妙計呀,放錦囊呀:

 public class Context {

// 構造函數,你要使用那個妙計
private IStrategy straegy;

public Context(IStrategy strategy) {

    this.straegy = strategy;
}

// 使用計謀了,看我出招了
public void operate() {

    this.straegy.operate();
 }

}

然後就是趙雲雄赳赳的揣着三個錦囊,拉着已步入老年行列的、還想着娶純情少女的、色迷迷的劉老 爺子去入贅了,嗨,還別說,小亮的三個妙計還真是不錯,瞅瞅:

 public class ZhaoYun {

/**
 * @param args
 */
public static void main(String[] args) {


    Context context;

    //剛剛到吳國的時候拆第一個
    System.out.println("-----------剛剛到吳國的時候拆第一個-------------");
    context = new Context(new BackDoor()); //拿到妙計
    context.operate(); //拆開執行
    System.out.println("\n\n\n\n\n\n\n\n");


    //劉備樂不思蜀了,拆第二個了
    System.out.println("-----------劉備樂不思蜀了,拆第二個了-------------");
    context = new Context(new GivenGreenLight());
    context.operate(); //執行了第二個錦囊了
    System.out.println("\n\n\n\n\n\n\n\n");


    //孫權的小兵追了,咋辦?拆第三個
    System.out.println("-----------孫權的小兵追了,咋辦?拆第三個-------------");
    context = new Context(new BlockEnemy());
    context.operate(); //孫夫人退兵
    System.out.println("\n\n\n\n\n\n\n\n");


 }

}

就這三招,搞的周郎是“陪了夫人又折兵”呀!這就是策略模式,高內聚低耦合的特點也表現出來了, 還有一個就是擴展性,也就是OCP 原則,策略類可以繼續增加下去,只要修改Context.java 就可以了,這 個不多說了,自己領會吧。

如果需要更多的類去實現這個接口方法的時候,不需要去修改類,只需要新增去實現接口,這樣就可以避免調用類代碼量臃腫,維護成本高。


策略模式,通過建立抽象,將不同的策略構建成一個具體的策略實現,通過不同的策略實現算法替換。在簡化邏輯、結構的同時,增強了系統的可讀性、穩定性、可擴展性,這對於較爲複雜的業務邏輯顯得更爲直觀,擴展也更爲方便。

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