本文實例講述了PHP設計模式之裝飾器模式定義與用法。分享給大家供大家參考,具體如下:
裝飾器模式:
如果已有對象的部分內容或功能性發生改變,但是不需要修改原始對象的結構或不使用繼承,動態的擴展一個對象的功能,則應該使用裝飾器模式。
簡單點說:就是我們不應該去修改已有的類,而是通過創建另外一個裝飾器類,通過這個裝飾器類去動態的擴展其需要修改的內容,這樣做的好處就是————
代碼引用自《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程序設計有所幫助。
新聞熱點
疑難解答
圖片精選