中文字幕日韩一区二区_国产一区二区av_国产毛片av_久久久久国产一区_色婷婷电影_国产一区二区精品

PHP設(shè)計模式之代理模式的深入解析

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

從技術(shù)上講,這種模式在客戶端和真實主體(RealSubject)之間插入一個代理對象,維護(hù)subject接口和用不同的方式委派它的方法。代理可以透明地做任何事情:懶散創(chuàng)建RealSubject或載入數(shù)據(jù),與其它機(jī)器交換消息,寫時復(fù)制策略等。這與HTTP代理有點類似,其客戶端(如瀏覽器)和應(yīng)用程序依賴于與HTTP服務(wù)器的聯(lián)系,代理在管理連接時可以完成其它任務(wù),如訪問控制和緩存大型下載文件。


代理模式的對象圖與裝飾模式對象圖在結(jié)構(gòu)上類似,但表達(dá)的目的各有不同,裝飾者給對象動態(tài)增加行為,而代理則控制來自客戶端的訪問。此外,代理只在需要時才創(chuàng)建RealSubject。

參與者:
◆客戶端(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)前加載對象圖的邊界。

2、Java RMI使用遠(yuǎn)程代理對象(遠(yuǎn)程代理),當(dāng)它們的方法被調(diào)用時,代理序列化參數(shù),執(zhí)行網(wǎng)絡(luò)上的請求,委托調(diào)用另一個節(jié)點上的真實對象,這種技術(shù)允許透明地調(diào)用遠(yuǎn)程對象,不用擔(dān)心它們是否在同一臺機(jī)器上,但這種透明度很容易會使執(zhí)行速度變慢。

下面的代碼示例實現(xiàn)了一個ImageProxy,推遲了圖像數(shù)據(jù)的加載。
復(fù)制代碼 代碼如下:
/** 
 * Subject interface. 
 * Client depends only on this abstraction. 
 */
interface Image 

    public function getWidth(); 

    public function getHeight(); 

    public function getPath(); 

    /** 
     * @return string   the image's byte stream 
     */
    public function dump(); 


/** 
 * Abstract class to avoid repetition of boilerplate code in the Proxy 
 * and in the Subject. Only the methods which can be provided without 
 * instancing the RealSubject are present here. 
 */
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; 
    } 


/** 
 * The RealSubject. Always loads the image, even if no dump of the data 
 * is required. 
 */
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; 
    } 


/** 
 * Proxy. Defers loading the image data until it becomes really mandatory. 
 * This class does its best to postpone the very expensive operations 
 * such as the actual loading of the BLOB. 
 */
class ImageProxy extends AbstractImage 

    public function __construct($path) 
    { 
 $this->_path = $path; 
 list ($this->_width, $this->_height) = getimagesize($path); 
    } 

    /** 
     * Creates a RawImage and exploits its functionalities. 
     */
    protected function _lazyLoad() 
    { 
 if ($this->_realImage === null) { 
     $this->_realImage = new RawImage($this->_path); 
 } 
    } 

    public function dump() 
    { 
 $this->_lazyLoad(); 
 return $this->_realImage->dump(); 
    } 


/** 
 * Client class that does not use the data dump of the image. 
 * Passing blindly a Proxy to this class and to other Clients makes sense 
 * as the data would be loaded anyway when Image::dump() is called. 
 */
class Client 

    public function tag(Image $img) 
    { 
 return '; 
    } 


$path = '/home/giorgio/shared/Immagini/kiki.png'; 
$client = new Client(); 

$image = new RawImage($path); // loading of the BLOB takes place 
echo $client->tag($image), "/n"; 

$proxy = new ImageProxy($path); 
echo $client->tag($proxy), "/n"; // loading does not take place even here

以上代碼實現(xiàn)了php的代理模式。簡單來講,代理模式就是為其他對象提供一個代理以控制對這個對象的訪問。

php技術(shù)PHP設(shè)計模式之代理模式的深入解析,轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 日韩av在线不卡 | 亚洲综合无码一区二区 | 依人成人 | 久久99精品久久久久 | 日本精品一区二区在线观看 | 久久综合久色欧美综合狠狠 | 欧州一区二区三区 | 又爽又黄axxx片免费观看 | 欧美乱操 | 精品国产不卡一区二区三区 | 一区二区三区亚洲 | 欧美乱操| 欧美精品在线免费观看 | 日本三级线观看 视频 | 久久成人精品视频 | 91综合在线观看 | 91免费看片 | av网站免费 | 美国一级黄色片 | 区一区二在线观看 | 亚洲精品久久久一区二区三区 | 久久久91精品国产一区二区三区 | 国产午夜亚洲精品不卡 | 国产成人99久久亚洲综合精品 | 中文字幕中文字幕 | 成人av一区二区亚洲精 | 精品一区二区三区中文字幕 | 成人午夜| 欧美日韩国产中文 | 色婷婷精品国产一区二区三区 | 免费看黄色国产 | 丝袜美腿一区 | 亚洲播放一区 | 精品国产一区二区三区久久久蜜月 | 91精品国产综合久久小仙女图片 | 亚洲一区二区三区四区视频 | 伊人焦久影院 | 免费成人高清在线视频 | 久久大全 | 国产精品一区二区在线免费观看 | 国产精品久久久久久久久久免费看 |