代理模式定義:
給某一個對象提供一個代理掠归,并由代理對象控制對元對象的引用躬厌。代理模式是一種對象結(jié)構(gòu)模式
代理模式機(jī)構(gòu)圖
遠(yuǎn)程代理:
為了一個位于不同地址空間的對象提供一個本地的代理對象,遠(yuǎn)程代理可以將網(wǎng)絡(luò)的細(xì)節(jié)隱藏起來筒严,是的客戶端不必考慮網(wǎng)絡(luò)的存在昔善,客戶端王權(quán)可以認(rèn)為被代理的遠(yuǎn)程業(yè)務(wù)對象是局域的而不是遠(yuǎn)程。而遠(yuǎn)程代理對象承擔(dān)了大部分的網(wǎng)絡(luò)通訊工作殿如,并負(fù)責(zé)對遠(yuǎn)程業(yè)務(wù)方法調(diào)用。
虛擬代理
對于一些占用系統(tǒng)資源比較多的或者加載時間長的對象捶枢,可以提供你虛擬代理握截,在真實對象創(chuàng)建成功過之間代理扮演真實對象的替身,二檔真實對象之后烂叔,虛擬代理講用戶的請求轉(zhuǎn)發(fā)給真實對象。
動態(tài)代理
通常情況下固歪,每個代理類編譯之后都會生成一個class文件蒜鸡,代理類的所有實現(xiàn)的接口和代理方法都是被固定的,動態(tài)代理就是為了減少class的增加牢裳。(jdk invocationHandler)
代理模式主要優(yōu)缺點
優(yōu)點
1.代理模式能夠協(xié)調(diào)調(diào)用者和被調(diào)用者逢防,在一定程度上降低了系統(tǒng)的耦合性,滿足迪米特法則
2.客戶端可以針對抽象主題角色進(jìn)行編程蒲讯,增加和替換代理類無須修改源代碼忘朝,符合開閉原則,系統(tǒng)具有更好的靈活性和擴(kuò)展性判帮。
3.遠(yuǎn)程代理位于兩個不同地址空間對象的訪問提供你一個實現(xiàn)機(jī)制局嘁,可以將一些消耗資源較多的對象和操作移至性能更好的計算技上,提高系統(tǒng)的整體運行效率晦墙。
4.虛擬代理通過一個消耗資源較少的對象代理一個消耗資源較多的對象悦昵,可以在一定程度上節(jié)省系統(tǒng)的運行開銷。
5.保護(hù)代理可以控制對一個對象的訪問權(quán)限晌畅,為不同用戶提供不同級別的使用權(quán)限但指。
缺點
1.由于客戶端和真實主題之間增加了代理對象,因此有寫類型的代理模式可能會造成請求的處理速度變慢,
2.實現(xiàn)代理需要額外的工作棋凳。有些代理模式的實現(xiàn)非常復(fù)雜拦坠,
代理模式使用場景
1.當(dāng)客戶端對象需要訪問遠(yuǎn)程主機(jī)中的對象時,可以使用遠(yuǎn)程代理剩岳、
2.當(dāng)需要用一個消耗資源較少的對象來代理一個消耗資源較多的對象贪婉,從而降低系統(tǒng)開銷÷啵縮短運行時間時疲迂,可以使用虛擬代理,
3.當(dāng)需要控制對一個對象的訪問莫湘,為不同用戶提供不同級別的訪問權(quán)限是可以使用尤蒿,保護(hù)代理
4.當(dāng)需要為摸一個被頻繁訪問的操作結(jié)果提供臨時空間,一共多個客戶端共享訪問這些結(jié)果時幅垮,可以使用緩沖代理腰池,通過緩沖代理,系統(tǒng)無須在客戶端每一次訪問時都重新執(zhí)行操作忙芒。只需要直接從臨時緩沖區(qū)獲取操作結(jié)果既可示弓。
5。當(dāng)需要為一個對象的訪問提供額外操作時呵萨,可以提供智能引用代理