舉例說明:
/**
* 作者:wanglei
* 郵箱:229846388@qq.com
* 代理模式
* 創(chuàng)建抽象對(duì)象接口(Subject):聲明你(真實(shí)對(duì)象)需要讓代購(代理對(duì)象)幫忙做的事(買Mac)
*/
public interface Subject {
public void buyMac();
}
/**
* 作者:wanglei
* 郵箱:229846388@qq.com
* 代理模式
* 創(chuàng)建代理對(duì)象類(Proxy),即”代購“搁痛,并通過代理類創(chuàng)建真實(shí)對(duì)象實(shí)例并訪問其方法
*/
public class Proxy implements Subject{
@Override
public void buyMac() {
//引用并創(chuàng)建真實(shí)對(duì)象實(shí)例雨女,即”我“
RealSubject realSubject = new RealSubject();
//調(diào)用真實(shí)對(duì)象的方法,進(jìn)行代理購買Mac
realSubject.buyMac();
//代理對(duì)象額外做的操作
this.WrapMac();
}
private void WrapMac(){
System.out.println("用盒子包裝好Mac");
}
}
/**
* 作者:wanglei
* 郵箱:229846388@qq.com
* 代理模式
* 創(chuàng)建真實(shí)對(duì)象類(RealSubject),即”我“
*/
public class RealSubject implements Subject{
@Override
public void buyMac() {
System.out.println("buy Mac ......");
}
}
/**
* 作者:wanglei
* 郵箱:229846388@qq.com
* 代理模式
* 定義:
* 1.給目標(biāo)對(duì)象提供一個(gè)代理對(duì)象曙痘,并由代理對(duì)象控制對(duì)目標(biāo)對(duì)象的引用
* 2.代理對(duì)象:起到中介作用芳悲,連接客戶端和目標(biāo)對(duì)象
* 3.例子:電腦桌面的快捷方式。電腦對(duì)某個(gè)程序提供一個(gè)快捷方式(代理對(duì)象)边坤,快捷方式連接客戶端和程序名扛,客戶端通過操作快捷方式就可以操作那個(gè)程序
* 主要作用:
* 通過引入代理對(duì)象的方式來間接訪問目標(biāo)對(duì)象
* 解決的問題:
* 防止直接訪問目標(biāo)對(duì)象給系統(tǒng)帶來的不必要復(fù)雜性。
* 實(shí)例講解:
* 實(shí)例概況
* 背景:小成希望買一臺(tái)最新的頂配Mac電腦
* 沖突:國內(nèi)還沒上茧痒,只有美國才有
* 解決方案:尋找代購進(jìn)行購買
* 代購(代理對(duì)象) 代替 我(真實(shí)對(duì)象) 去買Mac(間接訪問的操作)
*/
public class SimplePattern {
public static void main(String[] args) {
Proxy proxy = new Proxy();
proxy.buyMac();
}
}
/**
* 結(jié)果:
* buy Mac ......
* 用盒子包裝好Mac
* 優(yōu)點(diǎn):
* 1.協(xié)調(diào)調(diào)用者和被調(diào)用者肮韧,降低了系統(tǒng)的耦合度
* 2.代理對(duì)象作為客戶端和目標(biāo)對(duì)象之間的中介,起到了保護(hù)目標(biāo)對(duì)象的作用
* 缺點(diǎn):
* 1.由于在客戶端和真實(shí)主題之間增加了代理對(duì)象,因此會(huì)造成請(qǐng)求的處理速度變慢惹苗;
* 2.實(shí)現(xiàn)代理模式需要額外的工作(有些代理模式的實(shí)現(xiàn)非常復(fù)雜)殿较,從而增加了系統(tǒng)實(shí)現(xiàn)的復(fù)雜度。
* 應(yīng)用場景:
* 1.當(dāng)需要為一個(gè)對(duì)象再不同的地址空間提供局部的代表時(shí)此時(shí)的代理模式稱為遠(yuǎn)程代理:為一個(gè)對(duì)象在不同的地址空間提供局部代表桩蓉。
* 目的:
* 1.隱藏一個(gè)對(duì)象存在于不同地址空間的事實(shí)淋纲;
* 2.遠(yuǎn)程機(jī)器可能具有更好的計(jì)算性能與處理速度,可以快速響應(yīng)并處理客戶端請(qǐng)求院究。
* 2.當(dāng)需要?jiǎng)?chuàng)建開銷非常大的對(duì)象時(shí)此時(shí)的代理模式稱為虛擬代理:通過使用過一個(gè)小的對(duì)象代理一個(gè)大對(duì)象洽瞬。
* 目的:
* 1.減少系統(tǒng)的開銷。
* 3.當(dāng)需要控制對(duì)原始對(duì)象的訪問時(shí)此時(shí)的代理模式稱為保護(hù)代理:控制目標(biāo)對(duì)象的訪問业汰,給不同用戶提供不同的訪問權(quán)限
* 目的:
* 1.用來控制對(duì)真實(shí)對(duì)象的訪問權(quán)限
* 4.當(dāng)需要在訪問對(duì)象時(shí)附加額外操作時(shí)此時(shí)的代理模式稱為智能引用代理伙窃,額外操作包括耗時(shí)操作、計(jì)算訪問次數(shù)等等
* 目的:
* 1.在不影響對(duì)象類的情況下样漆,在訪問對(duì)象時(shí)進(jìn)行更多的操作
* 5.防火墻代理:保護(hù)目標(biāo)不讓惡意用戶靠近
* 6.Cache代理:為結(jié)果提供臨時(shí)的存儲(chǔ)空間为障,以便其他客戶端調(diào)用
*/
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者