js設計模式(9)---代理模式


0.前言                                                                

   KG、PP被交易到了布魯克林籃網,我的心情很復雜,一方面為他們不能終老celtics感到惋惜,另一方面為他們能夠再次沖擊總冠軍感到高興。從07年以來,作為一個鐵桿celtics球迷,他們給我帶來很多喜怒哀樂,也記載我的青春,不過這一切都會成為歷史。

1.代理模式是什么                                                 

   1.1、代理(proxy)是一個對象,它可以用來控制對另外一個對象的訪問;

   1.2、代理對象和本體對象實現了同樣的接口,並且會把任何方法調用傳遞給本體對象;

2、應用

   2.1、遠程代理

    代理可以代理本體對象被實例化,並使其可被遠程訪問。這一個應用自己不是很熟悉,暫時擱置。

   2.2、虛擬代理

   這是代理用於最多的一種情況。可以將本地的實例化推遲到真正需要的時候,對於實例化比較占用資源的本體,顯得非常有用。  

//本人較懶,把大叔的例子借用過來,進行了修改來說明虛擬代理如何使用,希望大叔別打我
//
先聲明美女對象 var girl = function (name) { this.name = name; }; // 這是dudu var dudu = function (girl) { this.girl = girl; this.sendGift = function (gift) { alert("Hi " + girl.name + ", dudu送你一個禮物:" + gift); } }; // 大叔是代理 var proxyTom = function (girl) { this.girl = girl; this.du = null; this._initialize = function(){ if(this.du === null){ this.du = new dude(this.girl) } } this.sendGift = function (gift) { this._initialize(); this.du.sendGift(gift); } };

//調用代理對象
var proxy = new proxyTom(new girl("酸奶小妹"));
proxy.sendGift("999朵玫瑰");
 

3.與裝飾者模式的區別                                           

   相同之處:都要對其他對象進行包裝,都要事先與被包裝對象相同的接口,而且都要把方法調用傳遞給被包裝的對象。

   不同之處:一是裝飾者會對被包裝對象的功能進行修改或擴充,但是代理只不過是控制對它的訪問;二是被包裝對象的創建方式上:裝飾者模式被包裝對象的實例化過程完全是獨立的,而在代理模式中,被包裝對象的實例化是代理的實例化過程的一部分。

4.個人理解總結                                                    

   1.代理模式是用來對對象進行控制;

   2.代理對象和本體對象實現了相同的接口;

   3.代理模式主要應用是虛擬代理、遠程代理

   4.虛擬代理主要面向那些實例化比較占用資源的類,通過虛擬代理可以延遲類的實例化,在需要調用的時候再進行實例化。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM