国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > PHP > 正文

php設計模式之策略模式應用案例詳解

2024-05-05 00:09:39
字體:
來源:轉載
供稿:網友

本文實例講述了php設計模式之策略模式應用。分享給大家供大家參考,具體如下:

策略模式

定義:

策略模式定義一系列的算法,將每個算法封裝起來,并讓它們可以相互裝換。策略模式讓算法獨立于使用它的客戶而獨立變化。

角色分析:

  1. 抽象策略角色:策略類,通常由一個接口或者抽象類實現;
  2. 具體策略角色:包裝了相關的算法和行為;
  3. 環境角色:持有一個策略類的引用,最終給客戶端用。

應用場景:

  1. 多個類只區別在表現行為不同,可以使用策略模式,在運行的時動態選擇具體要執行的行為。
  2. 需要在不同情況下使用不同的策略(算法) ,或者策略還可能在未來用其他方式來實現。
  3. 對客戶隱藏具策略(算法)的實現細節,彼此完全獨立。

代碼實現:

<?php/** * Created by PhpStorm. * Author: zhaorui * Date: 2019/2/27 * Time: 10:55 */header('Content-Type:text/html;charset=utf-8');// 抽象策略接口abstract class Strategy{  abstract function wayToSchool();}//具體策略角色class BikeStrategy extends Strategy{  function wayToSchool()  {    echo "騎自行車去上學".PHP_EOL;  }}class BusStrategy extends Strategy{  function wayToSchool()  {    echo "乘公共汽車去上學".PHP_EOL;  }}class TaxiStrategy extends Strategy{  function wayToSchool()  {    echo "坐出租去上學".PHP_EOL;  }}// 環境角色class Context{  private $strategy;  function getStrategy($strategyName){    try{      $strategyReflection = new ReflectionClass($strategyName);      $this->strategy = $strategyReflection->newInstance();    }catch (ReflectionException $e){      $this->strategy = "";    }  }  function goToSchool(){    $this->strategy->wayToSchool();  }}// 測試$context  = new Context();$context->getStrategy('BusStrategy');$context->goToSchool();

運行結果

乘公共汽車去上學

優點:

  1. 策略模式提供了管理相關的算法族的辦法。策略類的等級結構定義了一個算法或行為族。恰當使用繼承可以把公共的代碼轉移到父類里面,從而避免重復的代碼。
  2. 策略模式提供了可以替換繼承關系的辦法。繼承可以處理多種算法或行為。如果不是用策略模式,那么使用算法或行為的環境類就可能會有一些子類,每一個子類提供不同的算法或行為。但是,這樣一來算法或行為的使用者就和算法或行為本身混在一起。決定使用哪一種算法或采取哪一種行為的邏輯就和算法或行為的邏輯混在一起,從而不可能再獨立演化。繼承使得動態改變算法或行為變得不可能。
  3. 使用策略模式可以避免使用多重條件轉移語句。多重轉移語句不易維護,它把采取哪一種算法或采取哪一種行為的邏輯與算法或行為邏輯混合在一起,統統列在一個多重轉移語句里面,比使用繼承的辦法還要原始和落后。

缺點:

  1. 客戶端必須知道所有的策略類,并自行決定使用哪一個策略類。這就意味著客戶端必須理解這些算法的區別,以便適時選擇恰當的算法類。換而言之,策略模式只適用于客戶端知道的所有的算法或行為的情況。
  2. 策略模式造成很多的策略類,每個具體策略類都會產生一個新類。有時候可以通過把依賴于環境的狀態保存到客戶端里面,而將策略類設計成共享的,這樣策略類實例可以被不同客戶端使用。換而言之,可以使用享元模式來減少對象的數量。

希望本文所述對大家PHP程序設計有所幫助。


注:相關教程知識閱讀請移步到PHP教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 平南县| 内丘县| 务川| 庄河市| 隆林| 博爱县| 社会| 方山县| 紫金县| 察雅县| 新巴尔虎左旗| 特克斯县| 大同县| 礼泉县| 大渡口区| 新宾| 临泽县| 孝昌县| 商丘市| 临潭县| 临泉县| 棋牌| 洪雅县| 灌云县| 公主岭市| 陆良县| 顺平县| 阳谷县| 建昌县| 乌拉特后旗| 宜川县| 芷江| 大新县| 泰宁县| 逊克县| 南涧| 香港| 侯马市| 诏安县| 乐安县| 花垣县|