<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之旅 廣告
                > **設計模式-策略模式** ## 說明 ## **策略模式定義了一系列的算法,并將每一個算法封裝起來,而且使它們還可以相互替換。策略模式讓算法獨立于使用它的客戶而獨立變化,即封裝變化的算法。** ---------- ##模式說明## 1.多個類只區別在表現行為不同,可以使用策略模式,在運行時動態選擇具體要執行的行為。 2.需要在不同情況下使用不同的策略(算法),或者策略還可能在未來用其它方式來實現。 3.對客戶隱藏具體策略(算法)的實現細節,彼此完全獨立。 4.客戶端必須知道所有的策略類,并自行決定使用哪一個策略類,策略模式只適用于客戶端知道所有的算法或行為 ![https://blog.zxliu.cn/usr/uploads/2020/11/2092914566.png][1] ##代碼示例## <?php /** * 策略模式示例 * 策略模式定義了一系列的算法,并將每一個算法封裝起來,而且使它們還可以相互替換。策略模式讓算法獨立于使用它的客戶而獨立變化,即封裝變化的算法。 */ header('Content-Type: text/plain'); /** * 簡單計算器接口 * Interface Math */ interface Math{ public function calc($op1,$op2); } class MathAdd implements Math{ public function calc($op1, $op2) { return $op1+$op2; } } class MathSub implements Math{ public function calc($op1, $op2) { return $op1-$op2; } } class MathMul implements Math{ public function calc($op1, $op2) { return $op1*$op2; } } class MathDiv implements Math{ public function calc($op1, $op2) { if($op2==0){ throw new Exception("除數不能為0"); } return $op1/$op2; } } //封裝虛擬計算器 Class CMath{ protected $objCalc=null; public function __construct($thpe) { $cale="Math" . $thpe; $this->objCalc= new $cale(); } public function calc($op1,$op2){ return $this->objCalc->calc($op1,$op2); } } echo "計算10跟5的加減乘除運算".PHP_EOL.PHP_EOL; $objMath = new CMath('Add'); echo "加法運算".PHP_EOL; echo "結果:".$objMath->calc(10,5).PHP_EOL; $objMath = new CMath('Sub'); echo "減法運算".PHP_EOL; echo "結果:".$objMath->calc(10,5).PHP_EOL; $objMath = new CMath('Mul'); echo "乘法運算".PHP_EOL; echo "結果:".$objMath->calc(10,5).PHP_EOL; $objMath = new CMath('div'); echo "除法運算".PHP_EOL; echo "結果:".$objMath->calc(10,5).PHP_EOL; ---------- 結果: 計算10跟5的加減乘除運算 加法運算 結果:15 減法運算 結果:5 乘法運算 結果:50 除法運算 結果:2 ##策略模式跟工廠模式的區別## 工廠相關的模式屬于創建型模式,顧名思義,這種模式是用來創建對象的,返回的是new出來的對象。要調用對象的什么方法是由客戶端來決定的。 而策略模式屬性行為型模式,注重策略的執行,將要調用的函數方法封裝了起來,客戶端只需要調用執行的策略方法就可以了。 ## 結尾 ## <p style="background-image: -webkit-linear-gradient(left, #3498db, #f47920 10%, #d71345 20%, #f7acbc 30%,#ffd400 40%, #3498db 50%, #f47920 60%, #d71345 70%, #f7acbc 80%, #ffd400 90%, #3498db);color: transparent;-webkit-text-fill-color: transparent;-webkit-background-clip: text;text-align:center;"> 心如花木,向陽而生。 </p> [1]: https://blog.zxliu.cn/usr/uploads/2020/11/2092914566.png
                  <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>

                              哎呀哎呀视频在线观看