成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

PHP設(shè)計(jì)模式之代理模式

zhisheng / 2367人閱讀

摘要:虛擬代理如果需要?jiǎng)?chuàng)建一個(gè)資源消耗較大的對(duì)象,先創(chuàng)建一個(gè)消耗相對(duì)較小的對(duì)象來表示,真實(shí)對(duì)象只在需要時(shí)才會(huì)被真正創(chuàng)建。虛擬代理通過使用一個(gè)小對(duì)象來代表一個(gè)大對(duì)象,可以減少系統(tǒng)資源的消耗,對(duì)系統(tǒng)進(jìn)行優(yōu)化并提高運(yùn)行速度。

概念

代理模式(Proxy Pattern) :一種對(duì)象結(jié)構(gòu)型模式。給某一個(gè)對(duì)象提供一個(gè)代理,并由代理對(duì)象控制對(duì)原對(duì)象的引用。

UML

角色

抽象主題角色(Subject):定義了RealSubject和Proxy公用接口,這樣就在任何使用RealSubject的地方都可以使用Proxy。

真正主題角色(RealSubject):定義了Proxy所代表的真實(shí)實(shí)體。

代理對(duì)象(Proxy):保存一個(gè)引用使得代理可以訪問實(shí)體,并提供一個(gè)與RealSubject接口相同的接口,這樣代理可以用來代替實(shí)體(RealSubject)。

適用場景

根據(jù)代理模式的使用目的,常見的代理模式有以下幾種類型:

遠(yuǎn)程(Remote)代理:為一個(gè)位于不同的地址空間的對(duì)象提供一個(gè)本地 的代理對(duì)象,這個(gè)不同的地址空間可以是在同一臺(tái)主機(jī)中,也可是在 另一臺(tái)主機(jī)中,遠(yuǎn)程代理又叫做大使(Ambassador)。

虛擬(Virtual)代理:如果需要?jiǎng)?chuàng)建一個(gè)資源消耗較大的對(duì)象,先創(chuàng)建一個(gè)消耗相對(duì)較小的對(duì)象來表示,真實(shí)對(duì)象只在需要時(shí)才會(huì)被真正創(chuàng)建。

Copy-on-Write代理:它是虛擬代理的一種,把復(fù)制(克?。┎僮餮舆t 到只有在客戶端真正需要時(shí)才執(zhí)行。一般來說,對(duì)象的深克隆是一個(gè) 開銷較大的操作,Copy-on-Write代理可以讓這個(gè)操作延遲,只有對(duì)象被用到的時(shí)候才被克隆。

保護(hù)(Protect or Access)代理:控制對(duì)一個(gè)對(duì)象的訪問,可以給不同的用戶提供不同級(jí)別的使用權(quán)限。

緩沖(Cache)代理:為某一個(gè)目標(biāo)操作的結(jié)果提供臨時(shí)的存儲(chǔ)空間,以便多個(gè)客戶端可以共享這些結(jié)果。

防火墻(Firewall)代理:保護(hù)目標(biāo)不讓惡意用戶接近。

同步化(Synchronization)代理:使幾個(gè)用戶能夠同時(shí)使用一個(gè)對(duì)象而沒有沖突。

智能引用(Smart Reference)代理:當(dāng)一個(gè)對(duì)象被引用時(shí),提供一些額外的操作,如將此對(duì)象被調(diào)用的次數(shù)記錄下來等。

代碼

代碼如下:

_name = $name;
    }

    /**
     * 說話
     */
    public function say()
    {
        echo $this->_name."在說話
"; } /** * 在跑步 */ public function run(){ echo $this->_name."在跑步
"; } } /** * Class Proxy 代理對(duì)象 */ class Proxy implements Subject { // 真實(shí)主題對(duì)象 private $_realSubject = null; /** * Proxy constructor. 構(gòu)造方法,依賴注入方式儲(chǔ)存真實(shí)對(duì)象 * * @param RealSubject|null $realSubject */ public function __construct(RealSubject $realSubject = null) { if (empty($realSubject)) { $this->_realSubject = new RealSubject(); } else { $this->_realSubject = $realSubject; } } /** * 調(diào)用說話方法 */ public function say() { $this->_realSubject->say(); } /** * 調(diào)用跑步方法 */ public function run() { $this->_realSubject->run(); } } /** * Class Client 本地測試 */ class Client { public static function test() { // 創(chuàng)建 $subject = new RealSubject("張三"); // 代理 $proxy = new Proxy($subject); // 張三在說話 $proxy->say(); // 張三在跑步 $proxy->run(); } } // 測試 Client::test();

運(yùn)行結(jié)果:

張三在說話
張三在跑步
優(yōu)點(diǎn)和缺點(diǎn) 優(yōu)點(diǎn):

代理模式能夠協(xié)調(diào)調(diào)用者和被調(diào)用者,在一定程度上降低了系統(tǒng)的耦合度。

遠(yuǎn)程代理使得客戶端可以訪問在遠(yuǎn)程機(jī)器上的對(duì)象,遠(yuǎn)程機(jī)器 可能具有更好的計(jì)算性能與處理速度,可以快速響應(yīng)并處理客戶端請求。

虛擬代理通過使用一個(gè)小對(duì)象來代表一個(gè)大對(duì)象,可以減少系統(tǒng)資源的消耗,對(duì)系統(tǒng)進(jìn)行優(yōu)化并提高運(yùn)行速度。

保護(hù)代理可以控制對(duì)真實(shí)對(duì)象的使用權(quán)限。

缺點(diǎn):

由于在客戶端和真實(shí)主題之間增加了代理對(duì)象,因此 有些類型的代理模式可能會(huì)造成請求的處理速度變慢。

實(shí)現(xiàn)代理模式需要額外的工作,有些代理模式的實(shí)現(xiàn)非常復(fù)雜。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/22075.html

相關(guān)文章

  • php設(shè)計(jì)模式

    摘要:我們今天也來做一個(gè)萬能遙控器設(shè)計(jì)模式適配器模式將一個(gè)類的接口轉(zhuǎn)換成客戶希望的另外一個(gè)接口。今天要介紹的仍然是創(chuàng)建型設(shè)計(jì)模式的一種建造者模式。設(shè)計(jì)模式的理論知識(shí)固然重要,但 計(jì)算機(jī)程序的思維邏輯 (54) - 剖析 Collections - 設(shè)計(jì)模式 上節(jié)我們提到,類 Collections 中大概有兩類功能,第一類是對(duì)容器接口對(duì)象進(jìn)行操作,第二類是返回一個(gè)容器接口對(duì)象,上節(jié)我們介紹了...

    Dionysus_go 評(píng)論0 收藏0
  • php設(shè)計(jì)模式

    摘要:我們今天也來做一個(gè)萬能遙控器設(shè)計(jì)模式適配器模式將一個(gè)類的接口轉(zhuǎn)換成客戶希望的另外一個(gè)接口。今天要介紹的仍然是創(chuàng)建型設(shè)計(jì)模式的一種建造者模式。設(shè)計(jì)模式的理論知識(shí)固然重要,但 計(jì)算機(jī)程序的思維邏輯 (54) - 剖析 Collections - 設(shè)計(jì)模式 上節(jié)我們提到,類 Collections 中大概有兩類功能,第一類是對(duì)容器接口對(duì)象進(jìn)行操作,第二類是返回一個(gè)容器接口對(duì)象,上節(jié)我們介紹了...

    vspiders 評(píng)論0 收藏0
  • 【編程課堂】php設(shè)計(jì)模式(二):結(jié)構(gòu)型模式(續(xù))

    摘要:能夠協(xié)調(diào)調(diào)用者和被調(diào)用者,能夠在一定程度上降低系統(tǒng)的耦合性。特點(diǎn)低耦合性,獨(dú)立性好,安全性應(yīng)用客戶訪問不到或者被訪問者希望隱藏自己,所以通過代理來訪問自己。 我們接著上面的幾種模式繼續(xù)講: 4、組合模式 將對(duì)象組合成樹形結(jié)構(gòu)表示部分-整體的層次結(jié)構(gòu)。 特點(diǎn):靈活性強(qiáng) 應(yīng)用:對(duì)象的部分-整體的層次結(jié)構(gòu),模糊組合對(duì)象和簡單對(duì)象處理問題 代碼實(shí)現(xiàn) /** 組合模式* *///繼承模式clas...

    Nekron 評(píng)論0 收藏0
  • PHP基礎(chǔ)

    摘要:分別為適配器模式,裝飾器模式,代理模式,外觀模式,橋接模式,組合模式,享元模式。設(shè)計(jì)模式五適配器模式適配器模式將某個(gè)對(duì)象的接生成器和協(xié)程的實(shí)現(xiàn)在這篇文章中,作者針對(duì)那些比較難以理解的概念,以一個(gè)更為通俗的方式去講明白。。 PHP 源碼注解 PHP 的詳細(xì)源碼注解 PHP 字符串操作整理 一些有關(guān)字符串的常用操作。 Redis 常見七種使用場景 (PHP 實(shí)戰(zhàn)) 這篇文章主要介紹利用 R...

    HtmlCssJs 評(píng)論0 收藏0
  • PHP面試總結(jié)

    摘要:而在面試過程中,也是經(jīng)常會(huì)遇到的,所以,無論是面試準(zhǔn)備還是日常開發(fā),我們都應(yīng)該關(guān)注這方面的東西。二分法的基本做法是確定要查找的區(qū)間。區(qū)間內(nèi)選取二分點(diǎn)。根據(jù)二分點(diǎn)的值,綜合左右區(qū)間情況以及求解的目的,舍去一半無用的區(qū)間。 showImg(https://images.pexels.com/photos/935977/pexels-photo-935977.jpeg); 前言 面試是你進(jìn)入...

    alin 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<