PHP設(shè)計(jì)模式之裝飾器模式定義與用法簡單示例
本文實(shí)例講述了PHP設(shè)計(jì)模式之裝飾器模式定義與用法。分享給大家供大家參考,具體如下:
裝飾器模式:
如果已有對象的部分內(nèi)容或功能性發(fā)生改變,但是不需要修改原始對象的結(jié)構(gòu)或不使用繼承,動(dòng)態(tài)的擴(kuò)展一個(gè)對象的功能,則應(yīng)該使用裝飾器模式。
簡單點(diǎn)說:就是我們不應(yīng)該去修改已有的類,而是通過創(chuàng)建另外一個(gè)裝飾器類,通過這個(gè)裝飾器類去動(dòng)態(tài)的擴(kuò)展其需要修改的內(nèi)容,這樣做的好處就是————
- 1、我們可以保證類的層次不會(huì)因過多而發(fā)生混亂。
- 2、當(dāng)我們需求的修改很小時(shí),不用改變原有的數(shù)據(jù)結(jié)構(gòu)。
代碼引用自《PHP設(shè)計(jì)模式》。
/**
* 被修飾類
現(xiàn)在的需求:
要求能夠動(dòng)態(tài)為CD添加音軌、能顯示CD音軌列表。
顯示時(shí)應(yīng)采用單行并且為每個(gè)音軌都以音軌好為前綴。
*/
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;
}
}
/*
現(xiàn)在需求發(fā)生變化:
要求將當(dāng)前實(shí)例輸出的音軌都采用大寫形式。
這個(gè)需求并不是一個(gè)變化特別大的需求,不需要修改基類或創(chuàng)建一個(gè)父子關(guān)系的子類,此時(shí)創(chuàng)建一個(gè)基于裝飾器模式的裝飾器類。
*/
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); //轉(zhuǎn)換成大寫
}
}
}
//客戶端測試:
$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();
運(yùn)行結(jié)果:
The CD contains the following tracks: 1) WHAT IT MEANS. 2) BRR. 3) GOODBYE.
更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《php面向?qū)ο蟪绦蛟O(shè)計(jì)入門教程》、《PHP數(shù)組(Array)操作技巧大全》、《PHP基本語法入門教程》、《PHP運(yùn)算與運(yùn)算符用法總結(jié)》、《php字符串(string)用法總結(jié)》、《php+mysql數(shù)據(jù)庫操作入門教程》及《php常見數(shù)據(jù)庫操作技巧匯總》
希望本文所述對大家PHP程序設(shè)計(jì)有所幫助。
相關(guān)文章
php使用pdo連接mssql server數(shù)據(jù)庫實(shí)例
這篇文章主要介紹了php使用pdo連接mssql server數(shù)據(jù)庫的方法,以實(shí)例形式分析了php使用pdo連接mssql server數(shù)據(jù)庫的技巧,非常簡單實(shí)用,需要的朋友可以參考下2014-12-12
php提供實(shí)現(xiàn)反射的方法和實(shí)例代碼
在本篇文章里我們給各位分享了一篇關(guān)于php提供實(shí)現(xiàn)反射的方法和實(shí)例代碼相關(guān)內(nèi)容,有興趣的朋友們參考下。2019-09-09
php從memcache讀取數(shù)據(jù)再批量寫入mysql的方法
這篇文章主要介紹了php從memcache讀取數(shù)據(jù)再批量寫入mysql的方法,可利用memcache緩解服務(wù)器讀寫壓力,并實(shí)現(xiàn)數(shù)據(jù)庫數(shù)據(jù)的寫入操作,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2014-12-12
Linux環(huán)境下php實(shí)現(xiàn)給網(wǎng)站截圖的方法
這篇文章主要介紹了Linux環(huán)境下php實(shí)現(xiàn)給網(wǎng)站截圖的方法,結(jié)合實(shí)例形式較為詳細(xì)的分析了Linux環(huán)境下php實(shí)現(xiàn)網(wǎng)站截圖的具體步驟與相關(guān)操作技巧,需要的朋友可以參考下2016-05-05
解析使用ThinkPHP應(yīng)該掌握的調(diào)試手段
本篇文章是對使用ThinkPHP應(yīng)該掌握的調(diào)試手段進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06
PHP執(zhí)行zip與rar解壓縮方法實(shí)現(xiàn)代碼
PHP執(zhí)行zip與rar解壓縮方法 先放著,以后研究,有地方要用到。2010-12-12

