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

首頁 > 語言 > PHP > 正文

PHP設計模式之裝飾器模式定義與用法簡單示例

2024-05-05 00:04:59
字體:
來源:轉載
供稿:網友

本文實例講述了PHP設計模式之裝飾器模式定義與用法。分享給大家供大家參考,具體如下:

裝飾器模式:

如果已有對象的部分內容或功能性發生改變,但是不需要修改原始對象的結構或不使用繼承,動態的擴展一個對象的功能,則應該使用裝飾器模式。

簡單點說:就是我們不應該去修改已有的類,而是通過創建另外一個裝飾器類,通過這個裝飾器類去動態的擴展其需要修改的內容,這樣做的好處就是————

  • 1、我們可以保證類的層次不會因過多而發生混亂。
  • 2、當我們需求的修改很小時,不用改變原有的數據結構。

代碼引用自《PHP設計模式》。

/*** 被修飾類現在的需求:要求能夠動態為CD添加音軌、能顯示CD音軌列表。顯示時應采用單行并且為每個音軌都以音軌好為前綴。*/class CD{  public $trackList;  function __construct()  {    # code...    $this->trackList=array();  }  public function addTrack($track){    $this->trackList[]=$track;  }  public function getTrackList(){    $output=" ";    foreach ($this->trackList as $key => $value) {      # code...      $output.=($key+1).") {$value}. ";    }    return $output;  }}/*現在需求發生變化:要求將當前實例輸出的音軌都采用大寫形式。這個需求并不是一個變化特別大的需求,不需要修改基類或創建一個父子關系的子類,此時創建一個基于裝飾器模式的裝飾器類。*/class CDTrackListDecoratorCaps{  private $_cd;  public function __construct(CD $CD){    $this->_cd=$CD;  }  public function makeCaps(){    foreach ($this->_cd->trackList as $key => $value) {      # code...      $this->_cd->trackList[$key]=strtoupper($value); //轉換成大寫    }  }}//客戶端測試:$myCD=new CD();$trackList=array(  "what It Means",  "brr",  "goodBye"  );foreach ($trackList as $key => $value) {  # code...  $myCD->addTrack($value);}$myCDCaps=new CDTrackListDecoratorCaps($myCD);$myCDCaps->makeCaps();print "The CD contains the following tracks:".$myCD->getTrackList();

運行結果:

The CD contains the following tracks: 1) WHAT IT MEANS. 2) BRR. 3) GOODBYE.

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


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

圖片精選

主站蜘蛛池模板: 乌审旗| 葫芦岛市| 邵武市| 邛崃市| 北川| 吉首市| 新巴尔虎右旗| 汉川市| 建德市| 宕昌县| 叶城县| 中超| 平泉县| 诸城市| 独山县| 青海省| 芦溪县| 绥滨县| 四子王旗| 岳普湖县| 临颍县| 千阳县| 双城市| 乳山市| 兴和县| 汤阴县| 宽城| 巴里| 手游| 阿拉尔市| 保亭| 江口县| 黔江区| 长葛市| 鹿泉市| 徐水县| 湾仔区| 故城县| 保靖县| 綦江县| 依安县|