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

首頁 > 開發(fā) > PHP > 正文

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

2024-05-04 21:50:25
字體:
來源:轉載
供稿:網(wǎng)友

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

裝飾器模式:

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

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

1、我們可以保證類的層次不會因過多而發(fā)生混亂。

2、當我們需求的修改很小時,不用改變原有的數(shù)據(jù)結構。

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

  1. /** 
  2. * 被修飾類 
  3. 現(xiàn)在的需求: 
  4. 要求能夠動態(tài)為CD添加音軌、能顯示CD音軌列表。 
  5. 顯示時應采用單行并且為每個音軌都以音軌好為前綴。 
  6. */ 
  7. class CD 
  8.   public $trackList
  9.   function __construct() 
  10.   { 
  11.     # code... 
  12.     $this->trackList=array(); 
  13.   } 
  14.   public function addTrack($track){ 
  15.     $this->trackList[]=$track
  16.   } 
  17.   public function getTrackList(){ 
  18.     $output=" "
  19.     foreach ($this->trackList as $key => $value) { 
  20.       # code... 
  21.       $output.=($key+1).") {$value}. "
  22.     } 
  23.     return $output
  24.   } 
  25. /* 
  26. 現(xiàn)在需求發(fā)生變化: 
  27. 要求將當前實例輸出的音軌都采用大寫形式。 
  28. 這個需求并不是一個變化特別大的需求,不需要修改基類或創(chuàng)建一個父子關系的子類,此時創(chuàng)建一個基于裝飾器模式的裝飾器類。 
  29. */ 
  30. class CDTrackListDecoratorCaps{ 
  31.   private $_cd
  32.   public function __construct(CD $CD){ 
  33.     $this->_cd=$CD
  34.   } 
  35.   public function makeCaps(){ 
  36.     foreach ($this->_cd->trackList as $key => $value) { 
  37.       # code... 
  38.       $this->_cd->trackList[$key]=strtoupper($value); //轉換成大寫 
  39.     } 
  40.   } 
  41. //客戶端測試: 
  42. $myCD=new CD(); 
  43. $trackList=array
  44.   "what It Means"
  45.   "brr"
  46.   "goodBye" 
  47.   ); 
  48. foreach ($trackList as $key => $value) { 
  49.   # code... 
  50.   $myCD->addTrack($value); 
  51. $myCDCaps=new CDTrackListDecoratorCaps($myCD); 
  52. $myCDCaps->makeCaps(); 
  53. print "The CD contains the following tracks:".$myCD->getTrackList(); 

運行結果:

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

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 宝应县| 朝阳市| 观塘区| 福安市| 海南省| 牟定县| 萨嘎县| 澎湖县| 丹巴县| 江孜县| 突泉县| 顺昌县| 通化市| 湖北省| 玉溪市| 如皋市| 桦甸市| 开阳县| 江门市| 卓资县| 怀仁县| 奉化市| 治多县| 五寨县| 南京市| 崇义县| 永胜县| 祁阳县| 加查县| 姚安县| 娄底市| 平乐县| 名山县| 米易县| 阿拉善右旗| 从化市| 宾川县| 安宁市| 宾川县| 阳东县| 林周县|