20191219 策略模式

策略模式:指的是對象具備某個行爲,但是在不同的場景中,該行爲有不同的實現算法。

策略模式使用的就是面向對象的繼承和多態機制,從而實現同一行爲在不同場景下具備不同實現。

策略模式本質:分離算法,選擇實現。

 

主要解決

在有多種算法相似的情況下,使用 if...else 或 switch...case 所帶來的複雜性和臃腫性。

優點

1)算法多樣性,且具備自由切換功能;

2)有效避免多重條件判斷,增強了封裝性,簡化了操作,降低出錯概率;

3)擴展性良好,策略類遵頊 里氏替換原則,可以很方便地進行策略擴展;

 

使用場景

1、針對同一類型問題,有多種處理方式,每一種都能獨立解決問題;

2、算法需要自由切換的場景;

3、需要屏蔽算法規則的場景;

 

策略模式的通用 UML 類圖(如何畫類圖?類名,方法名,接口,類與類之間的關係)

從 UML 類圖中,我們可以看到,策略模式 主要包含三種角色:

1)上下文角色(Context):用來操作策略的上下文環境,屏蔽高層模塊(客戶端)對策略,算法的直接訪問,封裝可能存在的變化;

2)抽象策略角色(Strategy):規定策略或算法的行爲; 接口

3)具體策略角色(ConcreteStrategy):具體的策略或算法實現; 實現類

抽象策略類,具體策略實現。

    public static void main(String[] args) {
        //選擇一個具體策略
        IStrategy strategy = new ConcreteStrategyA();
        //來一個上下文環境
        Context context = new Context(strategy);
        //客戶端直接讓上下文環境執行算法
        context.algorithm();
    }
class Context {
        private IStrategy mStrategy;

        public Context(IStrategy strategy) {
            this.mStrategy = strategy;
        }

        public void algorithm() {
            this.mStrategy.algorithm();
        }
    }

策略模式中的上下文環境(Context),其職責本來是隔離客戶端與策略類的耦合,讓客戶端完全與上下文環境溝通,無需關係具體策略。

 

 

 

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