PHP設(shè)計(jì)模式中的代理模式(Proxy),它是對(duì)簡(jiǎn)單處理程序(或指針)的增強(qiáng),用于引用一個(gè)對(duì)象:這個(gè)指針被代理(Proxy)對(duì)象取代,代理對(duì)象位于客戶端(Client)和真實(shí)執(zhí)行程序之間,指針有一個(gè)可被多個(gè)目標(biāo)利用的鉤子。
從技術(shù)上講,這種模式在客戶端和真實(shí)主體(RealSubject)之間插入一個(gè)代理對(duì)象,維護(hù)subject接口和用不同的方式委派它的方法。
參與者:
◆客戶端(Client):取決于主體(Subject)實(shí)現(xiàn);
◆主體(Subject):RealSubject的抽象;
◆真實(shí)主體(RealSubject):完成代價(jià)高昂的工作或包含大量的數(shù)據(jù);
◆代理(Proxy):為Client提供一個(gè)與Subject一致的引用,僅在需要時(shí)才創(chuàng)建RealSubject實(shí)例或與RealSubject實(shí)例通信。
廣泛使用的代理模式例子:
1、對(duì)象-關(guān)系映射(Orms)在運(yùn)行中創(chuàng)建代理作為實(shí)體類的子類,以實(shí)現(xiàn)懶散加載(虛擬代理),這個(gè)代理會(huì)覆蓋所有實(shí)體方法,在前面追加一個(gè)載入程序,在方法被真正調(diào)用前不會(huì)包含任何數(shù)據(jù),Orms代理支持對(duì)象間的雙向關(guān)系,不用加載整個(gè)數(shù)據(jù)庫(kù),因?yàn)樗鼈儽恢糜诋?dāng)前加載對(duì)象圖的邊界。
感覺(jué)好難理解吧,我也不是很理解,看代碼吧~~~回頭慢慢理解
<?php //定義接口 interface Image { public function getWidth(); public function getHeight(); public function getPath(); //返回圖片內(nèi)容 public function dump(); } //抽象類主要是為了代碼層次,防止重復(fù)引用吧 abstract class AbstractImage implements Image{ protected $_width; protected $_height; protected $_path; protected $_data; public function getWidth(){ return $this->_width; } public function getHeight(){ return $this->_height; } public function getPath(){ return $this->_path; } } //真實(shí)主體 class RawImage extends AbstractImage{ public function __construct($path){ $this->_path = $path; list($this->_width,$this->_height) = getp_w_picpathsize($path); $this->_data = file_get_contents($path); } public function dump(){ return $this->_data; } } //代理 class ImageProxy extends AbstractImage{ public function __construct($path) { $this->_path = $path; list($this->_width,$this->_height) = getp_w_picpathsize($path); } protected function _layzLoad(){ if($this->_realImage === null) { $this->_realImage = new RawImage($this->_path); } } public function dump(){ $this->_layzLoad(); return $this->_realImage->dump(); } } //Client類比沒(méi)有使用_data來(lái)輸出p_w_picpath class Client{ public function tag(Image $img){ return ; } } $path = '/home/jane/下載/0904190.jpg'; $client = new Client(); //_data數(shù)據(jù)會(huì)被加載 $p_w_picpath = new RawImage($path); echo $client->tag($p_w_picpath); //_data數(shù)據(jù)不會(huì)被加載 $proxy = new ImageProxy($path); echo $client->tag($proxy);另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。
標(biāo)題名稱:PHP設(shè)計(jì)模式(7)代理模式-創(chuàng)新互聯(lián)
本文URL:http://www.rwnh.cn/article14/djppde.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供標(biāo)簽優(yōu)化、手機(jī)網(wǎng)站建設(shè)、域名注冊(cè)、全網(wǎng)營(yíng)銷推廣、網(wǎng)站改版、網(wǎng)站營(yíng)銷
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容