StrategyPattern--策略模式java實現

1.原理參考博客:https://www.cnblogs.com/java-my-life/archive/2012/05/10/2491891.html,此次咱們以三國諸葛亮給的錦囊妙計爲例

2.Strenge接口,全部的策略都是實現它的方法;

package cn.xiaobo.Strenge;html

/**
 * 一個策略接口,內部只須要定義一個方法就行;實現由具體的子類實現;
 * @author Administrator
 *
 */
java

public interface Strenge {算法

     void operate();
}
ide

3.BackDoor 策略1找喬國老幫忙防止被周瑜殺害,

package cn.xiaobo.Strenge;this

/**
 * 策略1找喬國老幫忙防止被周瑜殺害;
 * @author Administrator
 *
 */
public class BackDoor implements Strenge{
spa

    @Override
    public void operate() {
        System.out.println("找喬國老幫忙");
        
    }
}
.net

4.策略2找喬國老開綠燈,放行

package cn.xiaobo.Strenge;htm

/**
 * 策略2找喬國老開綠燈,放行;
 * @author Administrator
 *
 */
public class GiveGreenLight implements Strenge{
對象

    @Override
    public void operate() {
        System.out.println("找喬國老開綠燈");
        
    }
}
blog

5.策略3讓周瑜妹妹攔住追兵,逃出追殺

package cn.xiaobo.Strenge;

/**
 * 策略3讓周瑜妹妹攔住追兵,逃出追殺;
 * @author Administrator
 *
 */
public class BlockEnemy implements Strenge{

    @Override
    public void operate() {
        System.out.println("讓周瑜妹妹擋住追兵");
        
    }
}

6.將三個策略放入錦囊,只要將對應的策略取出便可

package cn.xiaobo.Strenge;

/**
 * 將三個策略放入錦囊,只要將對應的策略取出便可
 * @author Administrator
 *
 */

public class StrangeApp {
        private Strenge iStrenge;
        
        public StrangeApp(Strenge strenge) {
            // TODO Auto-generated constructor stub
            this.iStrenge=strenge;
        }
        public void operate(){
            this.iStrenge.operate();
        }

}

7.執行策略,趙雲是策略的執行者,只須要將一個個的策略執行就能夠

package cn.xiaobo.Strenge;

public class StrangeMain {

    /**
     * 趙雲是策略的執行者,只須要將一個個的策略執行就能夠;
     * @param args
     *
  
     */
    public static void main(String[] args) {
        //第一條策略
        BackDoor backDoor=new BackDoor();
        //第二條策略
        GiveGreenLight giveGreenLight=new GiveGreenLight();
        //第三條策略
        BlockEnemy blockEnemy=new BlockEnemy();
        
        System.out.println("剛到吳國");
        StrangeApp strange1=new StrangeApp(backDoor);
        strange1.operate();
        System.out.println("\n");
        
        System.out.println("樂不思蜀");
        StrangeApp strange2=new StrangeApp(giveGreenLight);
        strange2.operate();
        System.out.println("\n");
        
        System.out.println("媳婦斷後");
        StrangeApp strange3=new StrangeApp(blockEnemy);
        strange3.operate();
        System.out.println("\n");
    }

}

8.優勢與缺點

  * 優勢      * 策略模式提供了管理相關的算法族的辦法。      * 策略類的等級結構定義了一個算法或行爲族。      * 恰當使用繼承能夠把公共的代碼移到父類裏面,從而避免代碼重複      *      * 使用策略模式能夠避免使用多重條件(if-else)語句。      * 多重條件語句不易維護,它把採起哪種算法或採起哪種行爲的邏輯與算法或行爲的邏輯混合在一塊兒,      * 通通列在一個多重條件語句裏面,比使用繼承的辦法還要原始和落後。      *      * 缺點      * 因爲策略模式把每一個具體的策略實現都單獨封裝成爲類,若是備選的策略不少的話,那麼對象的數目就會很可觀      *      * 客戶端必須知道全部的策略類,並自行決定使用哪個策略類。這就意味着客戶端必須理解這些算法的區別,以便適時選擇恰當的算法類。      * 換言之,策略模式只適用於客戶端知道算法或行爲的狀況

相關文章
相關標籤/搜索