php設計模式 Proxy (代理模式)

來源:互聯網
上載者:User

代理,指的就是一個角色代表另一個角色採取行動,就象生活中,一個紅酒廠商,是不會直接把紅酒零售客戶的,都是通過代理來完成他的銷售業務。而客戶,也不用為了喝紅酒而到處找工廠,他只要找到廠商在當地的代理就行了,具體紅酒工廠在那裡,客戶不用關心,代理會幫他處理。

代理模式,就是給某一對象提供代理對象,並由代理對象控制具體對象的引用。

代理模式涉及的角色:

抽象主題角色,聲明了代理主題和真實主題的公用介面,使任何需要真實主題的地方都能用代理主題代替。
代理主題角色,含有真實主題的引用,從而可以在任何時候操作真實主題,代理主題功過提供和真實主題相同的介面,使它可以隨時代替真實主題。代理主題通過持有真實主題的引用,不但可以控制真實主題的建立或刪除,可以在真實主題被調用前進行攔截,或在調用後進行某些操作。
真實代理對象,定義了代理角色所代表的具體對象。
參考一下代碼:

複製代碼 代碼如下:<?php
/**
* 代理模式
*
* 為其他對象提供一個代理以控制這個對象的訪問
*
*/
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();

代理模式的工作方式:首先,因為代理主題和真實主題都實現了共同的介面,這使我們可以在不改變原來介面的情況下,只要用真實主題對象的地方,都可以用代理主題來代替。其次,代理主題在客戶和真實主題之間起了一個中介作用,利用這個中介平台,我們可以在把客戶請求傳遞給真實主題之前做一些必要的預先處理。

還有一個很常見的代理模式的使用例子就是對大幅圖片瀏覽的控制。在我們常見的網站上面瀏覽圖文的資訊時,不知道你有沒有注意到,圖片位置放置的是經過縮小的,當有人要仔細的查看這個圖片時,可以通過點擊圖片來啟用一個連結,在一個新的網頁開啟要看的圖片 。這樣對於提高瀏覽速度是很有好處的,因為不是每個人都要去看仔細圖上的資訊。這種情況就可以使用代理模式來全面實現。這裡我將思路表述出來,至於實現由於工作原因,就不表述了,至於這種方式在B/S模式下的真實可行性,我沒有確認過,只是憑空的想象。如果不是可行的方式,那這個例子可以放到一個C/S下來實現,這個是絕對沒有問題的,而且在很多介紹設計模式的書和文章中使用。兩種方式的實現有興趣的可以來嘗試一下:)

我們在瀏覽器中訪問網頁時是調用的不是真實的裝載圖片的方法,而是在代理對象中的方法,在這個對象中,先使用一個線程向瀏覽器裝載了一個縮小版的圖片,而在後台使用另一個線程來調用真實的裝載大圖片的方法將圖片載入到本地,當你要瀏覽這個圖片的時候,將其在新的網頁中顯示出來。當然如果在你想瀏覽的時候圖片尚未載入成功,可以再啟動一個線程來顯示提示資訊,直到載入成功。

這樣代理模式的功能就在上面體現的淋漓盡致——通過代理來將真實圖片的載入放到後台來操作,使其不影響前台的瀏覽。

代理模式能夠協調調用者和被調用者,能夠在一定程度上降低系統的耦合度。不過一定要記住前面講的使用代理模式的條件,不然的話使用了代理模式不但不會有好的效果,說不定還會出問題的。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.