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