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

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                #### 策略模式 策略模式(Strategy Pattern):定義一系列算法,將每一個算法封裝起來,并讓它們可以相互替換。策略模式讓算法獨立于使用它的客戶而變化,也稱為政策模式(Policy)。 常見示例:常見的排序算法有快速排序,冒泡排序,歸并排序,選擇排序等,如果我們需要在一個算法類中提供這些算法,一個常見的解決方法就是在類中定義多個方法,每個方法定義一種具體的排序算法,然后使用 if...else...去判斷到底是哪種算法,或者直接調用某個具體方法。這種方法是將算法的實現硬編碼到類中,這樣做最大的弊端就是算法類類非常臃腫,而且當需要增加或者更換一種新的排序方法時候,需要修改算法類的代碼,同時也需要修改客戶端調用處的代碼。策略模式就是為了解決這列問題而設計的。 `角色` Context: 環境類,使用一個ConcreteStrategy對象來配置;維護一個對Stategy對象的引用,同時,可以定義一個接口來讓Stategy訪問它的數據。 Strategy: 抽象策略類,定義所有支持的算法的公共接口。Context使用這個接口來調用某ConcreteStrategy定義的算法; ConcreteStrategy: 具體策略類,實現 Strategy 接口的具體算法; `UML類圖` ![此處輸入圖片的描述](https://doc.shiyanlou.com/document-uid108299labid2297timestamp1486376535542.png) `示例代碼`:`Strategy.class.php` ~~~php <?php abstract class Strategy{ abstract function use(); } class StrategyA extends Strategy { public function use() { echo "這是使用策略A的方法 <br>"; } } class StrategyB extends Strategy { public function use() { echo "這是使用策略B的方法 <br>"; } } class Context { protected $startegy; public function setStrategy(Strategy $startegy) { $this->startegy = $startegy; } public function use() { $this->startegy->use(); } } $context = new Context(); $startegyA = new StrategyA(); $startegyB = new StrategyB(); $context->setStrategy($startegyA); $context->use(); $context->setStrategy($startegyB); $context->use(); ~~~
                  <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>

                              哎呀哎呀视频在线观看