<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>

                >策略模式(Strategy Pattern):定義一系列算法,將每一個算法封裝起來,并讓它們可以相互替換。策略模式讓算法獨立于使用它的客戶而變化,也稱為政策模式(Policy) ## (一)為什么需要策略模式 1,在有多種算法相似的情況下,使用 if...else 所帶來的復雜和難以維護。 2,利用面向對象的繼承和多態機制,將多個算法解耦。避免類中出現太多的if-else語句 ## (二)策略模式 UML圖 ![](https://box.kancloud.cn/8873aac37e89b08b36c0490184fa7f25_1134x525.png) Context(應用場景): 1、需要使用ConcreteStrategy提供的算法。 2、 內部維護一個Strategy的實例。 3、 負責動態設置運行時Strategy具體的實現算法。 4、負責跟Strategy之間的交互和數據傳遞。 Strategy(抽象策略類): 定義了一個公共接口,各種不同的算法以不同的方式實現這個接口,Context使用這個接口調用不同的算法,一般使用接口或抽象類實現。 ConcreteStrategy(具體策略類): 實現了Strategy定義的接口,提供具體的算法實現。 ## (三)簡單實例 如果我們現在在做一個商城,用戶來了,我們想向其推薦對應的商品。比如說一個女性用戶登錄的話,我們就問她需要衣服,男性用戶就推薦螺絲刀,不確定性別就推薦《葵花寶典》 <?php //抽象策略接口 abstract class Strategy{ abstract function peddle(); } //具體封裝的策略方法 女性用戶策略 class ConcreteStrategyA extends Strategy { public function peddle(){ echo '美女穿這件衣服肯定很好看'.PHP_EOL; } } //男性用戶策略 class ConcreteStrategyB extends Strategy { public function peddle(){ echo '每一個男人都需要一個工具箱,充實工具箱,從購買各種螺絲刀開始'.PHP_EOL; } } //未知性別用戶策略 class ConcreteStrategyC extends Strategy { public function peddle(){ echo '骨骼清奇,這本《葵花寶典》最適合你'.PHP_EOL; } } //環境類 class Context{ protected $strategy; public function __construct(Strategy $strategy) { $this->strategy = $strategy; } public function request() { $this->strategy->peddle($this); } } //若處于女性用戶環境 $female_context = new Context(new ConcreteStrategyA); $female_context->request(); //若處于男性用戶環境 $male_context = new Context(new ConcreteStrategyB); $male_context->request(); //若處于未知性別用戶環境 $unknow_context = new Context(new ConcreteStrategyC); $unknow_context->request(); 這里我們可以看到,我們可以通過不同的環境選擇不同的策略,用戶性別的判斷 如果對于一個商城系統來說,完全可以在用戶登陸的時候通過數據庫的用戶信息得到,然后做出判斷,選擇適合的策略。 而且策略模式最顯而易見的優勢,就是如果我想增加一個新的策略怎么辦?比如說,如果用戶是小孩,就給他推薦《五年中考三年模擬》。是的,相信你們心里已經有答案了。那就是,再增加一個具體策略類。
                  <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>

                              哎呀哎呀视频在线观看