PHP常用設(shè)計模式之委托設(shè)計模式
模式定義
委托是對一個類的功能進行擴展和復(fù)用的方法。它的做法是:寫一個附加的類提供附加的功能,并使用原來的類的實例提供原有的功能。
假設(shè)我們有一個 TeamLead 類,將其既定任務(wù)委托給一個關(guān)聯(lián)輔助對象 JuniorDeveloper 來完成:本來 TeamLead 處理 writeCode 方法,Usage 調(diào)用 TeamLead 的該方法,但現(xiàn)在 TeamLead 將 writeCode 的實現(xiàn)委托給 JuniorDeveloper 的 writeBadCode 來實現(xiàn),但 Usage 并沒有感知在執(zhí)行 writeBadCode 方法。
設(shè)計了一個cd類,類中有mp3播放模式,和mp4播放模式
改進前,使用cd類的播放模式,需要在實例化的類中去判斷選擇什么方式的播放模式
改進后,播放模式當做一個參數(shù)傳入playList函數(shù)中,就自動能找到對應(yīng)需要播放的方法。
一,未改進前
<?php //使用委托模式之前,調(diào)用cd類,選擇cd播放模式是復(fù)雜的選擇過程 class cd { protected $cdInfo = array(); public function addSong($song) { $this->cdInfo[$song] = $song; } public function playMp3($song) { return $this->cdInfo[$song] . '.mp3'; } public function playMp4($song) { return $this->cdInfo[$song] . '.mp4'; } } $oldCd = new cd; $oldCd->addSong("1"); $oldCd->addSong("2"); $oldCd->addSong("3"); $type = 'mp3'; if ($type == 'mp3') { $oldCd->playMp3(); } else { $oldCd->playMp4(); }
二、通過委托模式,改進后的cd類
<?php namespace Tools; /* 委托模式 去除核心對象中的判決和復(fù)雜功能性 */ //委托接口 interface Delegate{ public function playList($list,$song); } //mp3處理類 class mp3 implements Delegate{ public function playList($list,$song){ return $list[$song].'.mp3'; } } //mp4處理類 class mp4 implements Delegate{ public function playList($list, $song) { return $list[$song].'.mp4'; } } class cdDelegate{ protected $cdInfo = array(); public function addSong($song){ $this->cdInfo[$song] = $song; } public function play($type,$song){ $name = '\Tools\\'.$type; $obj = new $name; return $obj->playList($this->cdInfo,$song); } } $newCd = new cdDelegate(); $newCd->addSong("1"); $newCd->addSong("2"); $newCd->addSong("3"); echo $newCd->play('mp3','1');//只要傳遞參數(shù)就能知道需要選擇何種播放模式
以上內(nèi)容給大家介紹了PHP委托設(shè)計模式實例詳解,希望對大家有所幫助。
相關(guān)文章
使用GDB調(diào)試PHP代碼,解決PHP代碼死循環(huán)問題
這篇文章主要介紹了使用GDB調(diào)試PHP代碼,解決PHP代碼死循環(huán)問題,需要的朋友可以參考下2015-03-03利用ThinkPHP內(nèi)置的ThinkAjax實現(xiàn)異步傳輸技術(shù)的實現(xiàn)方法
ThinkPHP的官方文檔沒有給出ThinkAjax的使用方法,令很多初學(xué)者使用起來有些不便,今天學(xué)到這里,也碰到了很多問題,花時間深究下,做個學(xué)習(xí)筆記,希望能對初學(xué)者有幫助2011-12-12Nginx環(huán)境下PHP flush失效的解決方法
最近在工作中發(fā)現(xiàn)了一個問題,PHP的flush居然失效了,從網(wǎng)上找了一些資料,發(fā)現(xiàn)是Nginx的原因,所以這篇文章就給大家介紹了問題與解決辦法,有需要的朋友們下面來一起看看吧。2016-10-10PHP 優(yōu)化配置——加速你的VBB,phpwind,Discuz,IPB,MolyX
PHP 優(yōu)化配置——加速你的VBB,phpwind,Discuz,IPB,MolyX...2007-07-07