PHP設計模式-代理模式
PHP設計模式中的代理模式(Proxy),它是對簡單處理程式(或指標)的增強,用於引用一個物件:這個指標被代理(Proxy)物件取代,代理物件位於客戶端(Client)和真實執行程式之間,指標有一個可被多個目標利用的鉤子。
從技術上講,這種模式在客戶端和真實主體(RealSubject)之間插入一個代理物件,維護subject介面和用不同的方式委派它的方法。
參與者:
◆客戶端(Client):取決於主體(Subject)實現;
◆主體(Subject):RealSubject的抽象;
◆真實主體(RealSubject):完成代價高昂的工作或包含大量的資料;
◆代理(Proxy):為Client提供一個與Subject一致的引用,僅在需要時才建立RealSubject例項或與RealSubject例項通訊。
廣泛使用的代理模式例子:
1、物件-關係對映(Orms)在執行中建立代理作為實體類的子類,以實現懶散載入(虛擬代理),這個代理會覆蓋所有實體方法,在前面追加一個載入程式,在方法被真正呼叫前不會包含任何資料,Orms代理支援物件間的雙向關係,不用載入整個資料庫,因為它們被置於當前載入物件圖的邊界。
感覺好難理解吧,我也不是很理解,看程式碼吧~~~回頭慢慢理解
//定義介面
interface Image {
public function getWidth();
public function getHeight();
public function getPath();
//返回圖片內容
public function dump();
}
//抽象類主要是為了程式碼層次,防止重複引用吧
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) = getimagesize($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) = getimagesize($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來輸出image
class Client{
public function tag(Image $img){
return ;
}
}
$path = '/home/jane/下載/0904190.jpg';
$client = new Client();
//_data資料會被載入
$image = new RawImage($path);
echo $client->tag($image);
//_data資料不會被載入
$proxy = new ImageProxy($path);
echo $client->tag($proxy);
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2157/viewspace-2801952/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- PHP設計模式(7)代理模式PHP設計模式
- 設計模式----代理模式設計模式
- 設計模式——代理模式設計模式
- 設計模式-代理模式設計模式
- 設計模式~代理模式設計模式
- 【設計模式】代理模式設計模式
- 《設計模式》之代理模式設計模式
- js設計模式--代理模式JS設計模式
- Java設計模式—代理模式Java設計模式
- Java設計模式-代理模式Java設計模式
- Java設計模式:代理模式Java設計模式
- 設計模式(七)——代理模式設計模式
- 【設計模式之代理模式】設計模式
- 設計模式(九):代理模式設計模式
- 設計模式之代理模式設計模式
- 設計模式 #5 (策略模式、代理模式)設計模式
- 代理設計模式設計模式
- 設計模式 - 代理模式詳解設計模式
- 設計模式——代理模式的思考設計模式
- Javascript設計模式之代理模式JavaScript設計模式
- Java 設計模式(四)《代理模式》Java設計模式
- Javascript設計模式(五)代理模式JavaScript設計模式
- JS設計模式四:代理模式JS設計模式
- Java設計模式之代理模式Java設計模式
- 極簡設計模式-代理模式設計模式
- 設計模式學習——代理模式設計模式
- Python設計模式-代理模式Python設計模式
- 設計模式系列之「代理模式」設計模式
- 【大話設計模式】——代理模式設計模式
- Java設計模式9:代理模式Java設計模式
- 設計模式:代理模式---替罪羔羊設計模式
- 設計模式:代理模式詳解設計模式
- 軟體設計模式————(代理模式)設計模式
- 設計模式--介面卡模式/代理模式設計模式
- 設計模式_JAVA動態代理設計模式設計模式Java
- Java設計模式-之代理模式(動態代理)Java設計模式
- php設計模式–策略模式PHP設計模式
- PHP設計模式—建立型設計模式PHP設計模式