設計模式-001策略模式

策略模式又稱爲算法簇模式。在該模式下定義了不同的算法,算法間可以互相替換。所以在該模式下使用者可以自由的在算法間進行調換,也就是說可以動態的改變對象的行爲。
設計原則:就是把一個類中經常改變或者將來可能會改變的部分提取出來,作爲一個接口。
策略模式的優點,高內聚低耦合。還有就是擴展性,也就是OCP原則,策略可以持續增加下去而不用修改使用者部分(也就是算法的調用者)。

5,策略模式的經典示例:(有人說這是個狀態模式,我只是個小白,在此不爭執)

劉備要到江東娶老婆了,走之前諸葛亮給趙雲(伴郎)三個錦囊妙計,說是按天機拆開能解決棘手問題,嘿,還別說,真解決了大問題,搞到最後是周瑜陪了夫人又折兵,那咱們先看看這個場景是什麼樣子的。

先說說這個場景中的要素:三個妙計,一個錦囊,一個趙雲,妙計是亮哥給的,妙計放在錦囊裏,俗稱就是錦囊妙計嘛,那趙雲就是一個幹活的人,從錦囊取出妙計,執行,然後獲勝。用java程序怎麼表現這些呢?
那我們先來看看圖?
這裏寫圖片描述
三個妙計是同一類型的東西,那咱就寫個接口:

package com.yangguangfu.strategy;  
/** 
 *  
 * @author [email protected]:阿福 
 * 首先定義一個策略接口,這是諸葛亮老人家給趙雲的三個錦囊妙計的接口。 
 */  
public interface IStrategy {  
    //每個錦囊妙計都是一個可執行的算法。  
    public void operate();  

}  

然後再寫三個實現類,有三個妙計嘛:

妙計一:初到吳國:

package com.yangguangfu.strategy;  
/** 
 *  
 * @author [email protected]:阿福 
 * 找喬國老幫忙,使孫權不能殺劉備。 
 */  
public class BackDoor implements IStrategy {  

    @Override  
    public void operate() {  
        System.out.println("找喬國老幫忙,讓吳國太給孫權施加壓力,使孫權不能殺劉備...");  
    }  

}  

妙計二:求吳國太開個綠燈,放行:
Java代碼

package com.yangguangfu.strategy;  
/** 
 *  
 * @author [email protected]:阿福 
 * 求吳國太開個綠燈。 
 */  
public class GivenGreenLight implements IStrategy {  

    @Override  
    public void operate() {  
        System.out.println("求吳國太開個綠燈,放行!");  

    }  

} 

妙計三:孫夫人斷後,擋住追兵:
Java代碼

package com.yangguangfu.strategy;  
/** 
 *  
 * @author [email protected]:阿福 
 * 孫夫人斷後,擋住追兵。 
 */  
public class BlackEnemy implements IStrategy {  

    @Override  
    public void operate() {  
        System.out.println("孫夫人斷後,擋住追兵...");  

    }  

}  

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

Java代碼

package com.yangguangfu.strategy;  
/** 
 *  
 * @author [email protected]:阿福 
 * 
 */  
public class Context {  

    private IStrategy strategy;  
    //構造函數,要你使用哪個妙計  
    public Context(IStrategy strategy){  
        this.strategy = strategy;  
    }  

    public void operate(){  
        this.strategy.operate();  
    }  

}  

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

package com.yangguangfu.strategy;  

public class ZhaoYun {  

    /** 
     * 趙雲出場了,他根據諸葛亮給他的交代,依次拆開妙計 
     */  
    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\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\n\n\n\n\n");  

        //孫權的小追兵了,咋辦?拆開第三個錦囊  
        System.out.println("----------孫權的小追兵了,咋辦?拆開第三個錦囊---------------");  
        context = new Context(new BlackEnemy());  
        context.operate();//拆開執行  
        System.out.println("\n\n\n\n\n\n\n\n\n\n\n\n\n");  
    }  
}  
發佈了42 篇原創文章 · 獲贊 10 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章