欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

php設(shè)計(jì)模式 Proxy (代理模式)

 更新時(shí)間:2011年06月26日 10:47:20   作者:  
為其他對(duì)象提供一個(gè)代理以控制這個(gè)對(duì)象的訪問(wèn)
代理,指的就是一個(gè)角色代表另一個(gè)角色采取行動(dòng),就象生活中,一個(gè)紅酒廠商,是不會(huì)直接把紅酒零售客戶的,都是通過(guò)代理來(lái)完成他的銷(xiāo)售業(yè)務(wù)。而客戶,也不用為了喝紅酒而到處找工廠,他只要找到廠商在當(dāng)?shù)氐拇砭托辛?,具體紅酒工廠在那里,客戶不用關(guān)心,代理會(huì)幫他處理。

代理模式,就是給某一對(duì)象提供代理對(duì)象,并由代理對(duì)象控制具體對(duì)象的引用。

代理模式涉及的角色:

抽象主題角色,聲明了代理主題和真實(shí)主題的公共接口,使任何需要真實(shí)主題的地方都能用代理主題代替。
代理主題角色,含有真實(shí)主題的引用,從而可以在任何時(shí)候操作真實(shí)主題,代理主題功過(guò)提供和真實(shí)主題相同的接口,使它可以隨時(shí)代替真實(shí)主題。代理主題通過(guò)持有真實(shí)主題的引用,不但可以控制真實(shí)主題的創(chuàng)建或刪除,可以在真實(shí)主題被調(diào)用前進(jìn)行攔截,或在調(diào)用后進(jìn)行某些操作。
真實(shí)代理對(duì)象,定義了代理角色所代表的具體對(duì)象。
參考一下代碼:

復(fù)制代碼 代碼如下:

<?php
/**
* 代理模式
*
* 為其他對(duì)象提供一個(gè)代理以控制這個(gè)對(duì)象的訪問(wèn)
*
*/
interface Proxy
{
public function request();
public function display();
}

class RealSubject
{
public function request()
{
echo "RealSubject request<br/>";
}

public function display()
{
echo "RealSubject display<br/>";
}
}

class ProxySubject
{
private $_subject = null;
public function __construct()
{
$this->_subject = new RealSubject();
}

public function request()
{
$this->_subject->request();
}

public function display()
{
$this->_subject->display();
}
}

$objProxy = new ProxySubject();
$objProxy->request();
$objProxy->display();

代理模式的工作方式:首先,因?yàn)榇碇黝}和真實(shí)主題都實(shí)現(xiàn)了共同的接口,這使我們可以在不改變?cè)瓉?lái)接口的情況下,只要用真實(shí)主題對(duì)象的地方,都可以用代理主題來(lái)代替。其次,代理主題在客戶和真實(shí)主題之間起了一個(gè)中介作用,利用這個(gè)中介平臺(tái),我們可以在把客戶請(qǐng)求傳遞給真實(shí)主題之前做一些必要的預(yù)處理。

還有一個(gè)很常見(jiàn)的代理模式的使用例子就是對(duì)大幅圖片瀏覽的控制。在我們常見(jiàn)的網(wǎng)站上面瀏覽圖文的信息時(shí),不知道你有沒(méi)有注意到,圖片位置放置的是經(jīng)過(guò)縮小的,當(dāng)有人要仔細(xì)的查看這個(gè)圖片時(shí),可以通過(guò)點(diǎn)擊圖片來(lái)激活一個(gè)鏈接,在一個(gè)新的網(wǎng)頁(yè)打開(kāi)要看的圖片 。這樣對(duì)于提高瀏覽速度是很有好處的,因?yàn)椴皇敲總€(gè)人都要去看仔細(xì)圖上的信息。這種情況就可以使用代理模式來(lái)全面實(shí)現(xiàn)。這里我將思路表述出來(lái),至于實(shí)現(xiàn)由于工作原因,就不表述了,至于這種方式在B/S模式下的真實(shí)可行性,我沒(méi)有確認(rèn)過(guò),只是憑空的想象。如果不是可行的方式,那這個(gè)例子可以放到一個(gè)C/S下來(lái)實(shí)現(xiàn),這個(gè)是絕對(duì)沒(méi)有問(wèn)題的,而且在很多介紹設(shè)計(jì)模式的書(shū)和文章中使用。兩種方式的實(shí)現(xiàn)有興趣的可以來(lái)嘗試一下:)

我們?cè)跒g覽器中訪問(wèn)網(wǎng)頁(yè)時(shí)是調(diào)用的不是真實(shí)的裝載圖片的方法,而是在代理對(duì)象中的方法,在這個(gè)對(duì)象中,先使用一個(gè)線程向?yàn)g覽器裝載了一個(gè)縮小版的圖片,而在后臺(tái)使用另一個(gè)線程來(lái)調(diào)用真實(shí)的裝載大圖片的方法將圖片加載到本地,當(dāng)你要瀏覽這個(gè)圖片的時(shí)候,將其在新的網(wǎng)頁(yè)中顯示出來(lái)。當(dāng)然如果在你想瀏覽的時(shí)候圖片尚未加載成功,可以再啟動(dòng)一個(gè)線程來(lái)顯示提示信息,直到加載成功。

這樣代理模式的功能就在上面體現(xiàn)的淋漓盡致——通過(guò)代理來(lái)將真實(shí)圖片的加載放到后臺(tái)來(lái)操作,使其不影響前臺(tái)的瀏覽。

代理模式能夠協(xié)調(diào)調(diào)用者和被調(diào)用者,能夠在一定程度上降低系統(tǒng)的耦合度。不過(guò)一定要記住前面講的使用代理模式的條件,不然的話使用了代理模式不但不會(huì)有好的效果,說(shuō)不定還會(huì)出問(wèn)題的。

相關(guān)文章

最新評(píng)論