<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                18.3 策略模式的應用 18.3.1 策略模式的優點 ● 算法可以自由切換 這是策略模式本身定義的,只要實現抽象策略,它就成為策略家族的一個成員,通過封裝角色對其進行封裝,保證對外提供“可自由切換”的策略。 ● 避免使用多重條件判斷 如果沒有策略模式,我們想想看會是什么樣子?一個策略家族有5個策略算法,一會要使用A策略,一會要使用B策略,怎么設計呢?使用多重的條件語句?多重條件語句不易維護,而且出錯的概率大大增強。使用策略模式后,可以由其他模塊決定采用何種策略,策略家族對外提供的訪問接口就是封裝類,簡化了操作,同時避免了條件語句判斷。 ● 擴展性良好 這甚至都不用說是它的優點,因為它太明顯了。在現有的系統中增加一個策略太容易了,只要實現接口就可以了,其他都不用修改,類似于一個可反復拆卸的插件,這大大地符合了OCP原則。 18.3.2 策略模式的缺點 ● 策略類數量增多 每一個策略都是一個類,復用的可能性很小,類數量增多。 ● 所有的策略類都需要對外暴露 上層模塊必須知道有哪些策略,然后才能決定使用哪一個策略,這與迪米特法則是相違背的,我只是想使用了一個策略,我憑什么就要了解這個策略呢?那要你的封裝類還有什么意義?這是原裝策略模式的一個缺點,幸運的是,我們可以使用其他模式來修正這個缺陷,如工廠方法模式、代理模式或享元模式。 18.3.3 策略模式的使用場景 ● 多個類只有在算法或行為上稍有不同的場景。 ● 算法需要自由切換的場景。 例如,算法的選擇是由使用者決定的,或者算法始終在進化,特別是一些站在技術前沿的行業,連業務專家都無法給你保證這樣的系統規則能夠存在多長時間,在這種情況下策略模式是你最好的助手。 ● 需要屏蔽算法規則的場景。 現在的科技發展得很快,人腦的記憶是有限的(就目前來說是有限的),太多的算法你只要知道一個名字就可以了,傳遞相關的數字進來,反饋一個運算結果,萬事大吉。 18.3.4 策略模式的注意事項 如果系統中的一個策略家族的具體策略數量超過4個,則需要考慮使用混合模式,解決策略類膨脹和對外暴露的問題,否則日后的系統維護就會成為一個燙手山芋,誰都不想接。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看