結(jié)構(gòu)型模式類型:代理模式--替別人把妹

前段時(shí)間我一個(gè)很慫的朋友說希望我給他介紹一個(gè)女朋友,簡稱songHai,我就托朋友幫忙物色了一個(gè)锤悄。那么怎么讓這個(gè)慫貨開始的時(shí)候不尬聊,那不得讓雙方有一個(gè)初步的了解嘉抒。這個(gè)時(shí)候就需要代理模式零聚。

定義

顧名思義就是幫別人做(zuo)事(mei)、解(la)決(pi)問(tiao)題些侍,

代理模式(Proxy)隶症,為其他對(duì)象提供一種代理以控制這個(gè)對(duì)象的訪問。
首先songHai需要知道對(duì)方的名字岗宣,為了一個(gè)好印象蚂会,開局送了輛寶馬,不差錢耗式。

// 先聲明美女對(duì)象
var girl = function (name) {
    this.name = name;
};

// 這是慫海
var songHai= function (girl) {
    this.girl = girl;
    this.sendGift= function (gift) {
        alert("Hi " + girl.name + ", 慫逼送你一個(gè)禮物:" + gift);
    }
};

// 好人是為代理
var proxyGoodMen = function (girl) {
    this.girl = girl;
    this.sendGift = function (gift) {
        (new songHai(girl)).sendGift(gift); // 替songHai送寶馬過去嘍
    }
};


在songHai 和proxyGoodMen 之間胁住,屬性和方法是很相近的,不同的是刊咳,對(duì)象songHai因?yàn)槟撤N原因彪见,不方便去直接執(zhí)行sendGift,需要proxyGoodMen去代為執(zhí)行芦缰。

執(zhí)行方式

var proxy = new proxyTom(new girl("知名網(wǎng)紅小妹"));
proxy.sendGift("寶馬");

代理模式常用場景

  • 1企巢、遠(yuǎn)程代理枫慷,也就是為了一個(gè)對(duì)象在不同的地址空間提供局部代表让蕾,這樣可以隱藏一個(gè)對(duì)象存在于不同地址空間的事實(shí),就像web service里的代理類一樣或听。

  • 2探孝、虛擬代理,根據(jù)需要?jiǎng)?chuàng)建開銷很大的對(duì)象誉裆,通過它來存放實(shí)例化需要很長時(shí)間的真實(shí)對(duì)象顿颅,這樣就可以達(dá)到性能的最優(yōu)化,比如說你打開一個(gè)很大的HTML網(wǎng)頁時(shí)足丢,里面可能有很多的文字與圖片粱腻,整個(gè)網(wǎng)頁很快就可以打開,但你此時(shí)看到的是所有的文字斩跌,圖片是一張張加載后才能看到绍些,那些未下載的圖片替代區(qū)域就是通過虛擬代理代替了真實(shí)的圖片,

  • 3耀鸦、安全代理柬批,用來控制真實(shí)對(duì)象訪問時(shí)的權(quán)限啸澡,一般用于對(duì)象應(yīng)該有不同的訪問權(quán)限。

  • 4氮帐、智能指引 嗅虏,是指當(dāng)調(diào)用真實(shí)的對(duì)象時(shí),代理處理另外一些事上沐。

代理模式其實(shí)就是在訪問對(duì)象時(shí)引入一定程度的間接性皮服,因?yàn)檫@種間接性,可以附加多種用途参咙。

用虛擬代理實(shí)現(xiàn)圖片loading

看下面一段代碼

var myImage = (function(){
    var imgNode = document.createElement("img");
    imgNode.alt='imgNode'
    document.body.appendChild(imgNode);
    return {
        setSrc: function(src){
            imgNode.src = src;
            console.log('1')
        } 
    }
}());

var proxyImage = (function(){
    /**用來檢測圖片地址變化的對(duì)象img,并不會(huì)添加到界面中冰更,只當(dāng)做為與
    被代理圖片有相同src屬性的對(duì)象。
    **/
    var img = new Image();
    img.onload = function(){
        console.log('4')
        myImage.setSrc( this.src );
        console.log('5')
    }
    return {
    setSrc: function(src){
        console.log('2')
        myImage.setSrc( "loading.gif" );
        console.log('3')
        img.src = src;
    }
  }
})();

proxyImage.setSrc("load.jpg");

打印出的結(jié)果:

1
3
/**img.src = src  修改img 屬性昂勒,圖片加載完畢后觸發(fā)img.onload函數(shù)**/
4
1
5

proxyImage對(duì)象首先調(diào)用了myImage.setSrc方法蜀细,加載一個(gè)加載速度快或者常用緩存好的圖片,將將要加載的圖片src賦值給 img對(duì)象戈盈,通過img.onload監(jiān)測將要加載圖片是否加載完成奠衔,然后再次調(diào)用myImage.setSrc方法。

es6中的proxy

在支持 Proxy 的瀏覽器環(huán)境中塘娶,Proxy是一個(gè)全局對(duì)象归斤,可以直接使用。 Proxy(target, handler)是一個(gè)構(gòu)造函數(shù)刁岸, target是被代理的對(duì)象 handlde是聲明了各類代理操作的對(duì)象脏里,最終返回一個(gè)代理對(duì)象。外界每次通過代理對(duì)象訪問 target對(duì)象的屬性時(shí)虹曙,就會(huì)經(jīng)過 handler對(duì)象迫横,從這個(gè)流程來看,代理對(duì)象很類似 middleware(中間件)酝碳。那么 Proxy 可以攔截什么操作呢矾踱?最常見的就是 get(讀取)疏哗、 set(修改)對(duì)象屬性等操作呛讲,完整操作

總結(jié):

當(dāng)你想用代理模式時(shí)返奉,你可能會(huì)想要:

  • 攔截或控制訪問一個(gè)對(duì)象
  • 簡化模糊的規(guī)則或輔助邏輯方法/類的復(fù)雜性
  • 沒有驗(yàn)證/準(zhǔn)備之前贝搁,防止重-資源動(dòng)作。

待完成芽偏,其他應(yīng)用代碼未補(bǔ)充雷逆,反正沒人看.gif

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市哮针,隨后出現(xiàn)的幾起案子关面,更是在濱河造成了極大的恐慌坦袍,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,542評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件等太,死亡現(xiàn)場離奇詭異捂齐,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)缩抡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門奠宜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人瞻想,你說我怎么就攤上這事压真。” “怎么了蘑险?”我有些...
    開封第一講書人閱讀 163,912評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵滴肿,是天一觀的道長。 經(jīng)常有香客問我佃迄,道長泼差,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,449評(píng)論 1 293
  • 正文 為了忘掉前任呵俏,我火速辦了婚禮堆缘,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘普碎。我一直安慰自己吼肥,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,500評(píng)論 6 392
  • 文/花漫 我一把揭開白布麻车。 她就那樣靜靜地躺著缀皱,像睡著了一般。 火紅的嫁衣襯著肌膚如雪绪氛。 梳的紋絲不亂的頭發(fā)上唆鸡,一...
    開封第一講書人閱讀 51,370評(píng)論 1 302
  • 那天涝影,我揣著相機(jī)與錄音枣察,去河邊找鬼。 笑死燃逻,一個(gè)胖子當(dāng)著我的面吹牛序目,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播伯襟,決...
    沈念sama閱讀 40,193評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼猿涨,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了姆怪?” 一聲冷哼從身側(cè)響起叛赚,我...
    開封第一講書人閱讀 39,074評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤澡绩,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后俺附,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體肥卡,經(jīng)...
    沈念sama閱讀 45,505評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,722評(píng)論 3 335
  • 正文 我和宋清朗相戀三年事镣,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了步鉴。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,841評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡璃哟,死狀恐怖氛琢,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情随闪,我是刑警寧澤阳似,帶...
    沈念sama閱讀 35,569評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站铐伴,受9級(jí)特大地震影響障般,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜盛杰,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,168評(píng)論 3 328
  • 文/蒙蒙 一挽荡、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧即供,春花似錦定拟、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至驱证,卻和暖如春延窜,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背抹锄。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評(píng)論 1 269
  • 我被黑心中介騙來泰國打工逆瑞, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人伙单。 一個(gè)月前我還...
    沈念sama閱讀 47,962評(píng)論 2 370
  • 正文 我出身青樓获高,卻偏偏與公主長得像,于是被迫代替她去往敵國和親吻育。 傳聞我的和親對(duì)象是個(gè)殘疾皇子念秧,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,781評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 工廠模式類似于現(xiàn)實(shí)生活中的工廠可以產(chǎn)生大量相似的商品,去做同樣的事情布疼,實(shí)現(xiàn)同樣的效果;這時(shí)候需要使用工廠模式摊趾。簡單...
    舟漁行舟閱讀 7,758評(píng)論 2 17
  • 從三月份找實(shí)習(xí)到現(xiàn)在币狠,面了一些公司,掛了不少砾层,但最終還是拿到小米总寻、百度、阿里梢为、京東渐行、新浪、CVTE铸董、樂視家的研發(fā)崗...
    時(shí)芥藍(lán)閱讀 42,246評(píng)論 11 349
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理祟印,服務(wù)發(fā)現(xiàn),斷路器粟害,智...
    卡卡羅2017閱讀 134,656評(píng)論 18 139
  • 國家電網(wǎng)公司企業(yè)標(biāo)準(zhǔn)(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報(bào)批稿:20170802 前言: 排版 ...
    庭說閱讀 10,967評(píng)論 6 13
  • 一個(gè)階段的暫停蕴忆,暫停了工作、家庭悲幅、摯友套鹅,剩下自己去交替他人口中的生活。 清晨起床汰具。洗澡卓鹿。煎蛋。做一小碗噴香貓飯留荔。放...
    鯉煜閱讀 278評(píng)論 0 0