国产探花免费观看_亚洲丰满少妇自慰呻吟_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ā)表
主站蜘蛛池模板: 多伦县| 万盛区| 康保县| 湘潭市| 淮滨县| 德格县| 吉林省| 五指山市| 蕲春县| 安西县| 临海市| 万宁市| 湘潭县| 平江县| 常德市| 临西县| 汉阴县| 九龙坡区| 遂昌县| 合阳县| 巴彦淖尔市| 亳州市| 黄平县| 锡林浩特市| 鄯善县| 盱眙县| 青田县| 永新县| 孝感市| 双江| 二连浩特市| 进贤县| 遂溪县| 抚顺县| 开鲁县| 青神县| 密云县| 绍兴县| 浪卡子县| 陆良县| 武定县|