溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

PHP設(shè)計模式(7)代理模式

發(fā)布時間:2020-06-28 23:39:19 來源:網(wǎng)絡(luò) 閱讀:429 作者:shayang88 欄目:web開發(fā)

PHP設(shè)計模式中的代理模式(Proxy),它是對簡單處理程序(或指針)的增強,用于引用一個對象:這個指針被代理(Proxy)對象取代,代理對象位于客戶端(Client)和真實執(zhí)行程序之間,指針有一個可被多個目標(biāo)利用的鉤子。

從技術(shù)上講,這種模式在客戶端和真實主體(RealSubject)之間插入一個代理對象,維護subject接口和用不同的方式委派它的方法。

PHP設(shè)計模式(7)代理模式

參與者

客戶端(Client):取決于主體(Subject)實現(xiàn);

主體(Subject):RealSubject的抽象;

真實主體(RealSubject):完成代價高昂的工作或包含大量的數(shù)據(jù);

代理(Proxy):為Client提供一個與Subject一致的引用,僅在需要時才創(chuàng)建RealSubject實例或與RealSubject實例通信。

廣泛使用的代理模式例子:

1、對象-關(guān)系映射(Orms)在運行中創(chuàng)建代理作為實體類的子類,以實現(xiàn)懶散加載(虛擬代理),這個代理會覆蓋所有實體方法,在前面追加一個載入程序,在方法被真正調(diào)用前不會包含任何數(shù)據(jù),Orms代理支持對象間的雙向關(guān)系,不用加載整個數(shù)據(jù)庫,因為它們被置于當(dāng)前加載對象圖的邊界。

感覺好難理解吧,我也不是很理解,看代碼吧~~~回頭慢慢理解

<?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;
}

}
//真實主體
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類比沒有使用_data來輸出p_w_picpath
class Client{
public function tag(Image $img){
return ;
}
}
$path = '/home/jane/下載/0904190.jpg';
$client = new Client();
//_data數(shù)據(jù)會被加載
$p_w_picpath = new RawImage($path);
echo $client->tag($p_w_picpath);
//_data數(shù)據(jù)不會被加載
$proxy = new ImageProxy($path);
echo $client->tag($proxy);


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI