其他設(shè)計(jì)模式
java單例模式
java建造者模式
java策略模式
java代理模式
java觀察者模式
java適配器模式
java外觀模式
生活中的代理模式
經(jīng)典劇《武林外傳》中庇勃,有一集是秀才讓小六代其求婚,當(dāng)播放到最后片段吊趾,劇中油讯,郭芙蓉對呂秀才狠狠地說:“呂秀才塔拳,是你讓小六向我求婚的吧欠橘?”摄悯。
“造物弄人赞季!”呂秀才慘慘地答道,“這只是一個(gè)玩笑”
“哦奢驯!申钩。。瘪阁。玩笑撒遣!”郭芙蓉冷笑地說:“我殺了你!”
秀才速奔出去管跺,郭芙蓉口中叫著“你給我站住”义黎,跟著跑了出去。
呂秀才讓小六代其向郭芙蓉求婚豁跑,這就是代理模式廉涕!
秀才讓小六代其求婚實(shí)例講解
步驟1: 創(chuàng)建抽象對象接口(Subject):聲明呂秀才(真實(shí)對象)需要讓燕小六(代理對象)幫忙做的事(求婚)
public interface Subject {
public void request();
}
步驟2: 創(chuàng)建真實(shí)對象類(RealSubject),即“呂秀才”
public class RealSubject implements Subject{
@Override
public void request() {
System.out.print("芙蓉妹妹,嫁給我");
}
}
步驟3:創(chuàng)建代理對象類(Proxy)艇拍,即“燕小六”火的,并通過代理類創(chuàng)建真實(shí)對象實(shí)例訪問其方法
public class Proxy implements Subject{
RealSubject realSubject;
@Override
public void request() {
if (realSubject==null){
realSubject=new RealSubject();
}
realSubject.request();
}
}
步驟4:客戶端調(diào)用
public static void main(String[]args) {
Proxy proxy=new Proxy();
proxy.request();
}
代理模式應(yīng)用
第一種 遠(yuǎn)程代理,也就是為一個(gè)對象在不同的地址空間提供局部代表淑倾,這樣可以隱藏一個(gè)對象存在于不同地址空間的事實(shí)馏鹤。
例如:當(dāng)我在應(yīng)用程序項(xiàng)目中加入一個(gè)web引用,引用一個(gè)WebService,此時(shí)項(xiàng)目中會生成一個(gè)WebReference的文件夾和一些文件娇哆,它們就是代理湃累,這就使得客戶端程序調(diào)用代理就可以解決遠(yuǎn)程訪問的問題
第二種虛擬代理勃救,是根據(jù)需要?jiǎng)?chuàng)建開銷很大的對象,通過它存放實(shí)例化需要很長時(shí)間的真實(shí)對象治力。
例如:我們打開一個(gè)很大的HTML網(wǎng)頁時(shí)蒙秒,里面有很大文字和圖片,你可以很快的看見所有文字宵统,但圖片卻是一張張下載后才能看到晕讲,那些未打開的圖片框,就是通過虛擬代理來替代了真實(shí)圖片马澈,此時(shí)代理存儲了真實(shí)圖片的路徑很尺寸瓢省。
第三種安全代理,用來控制真實(shí)對象方式時(shí)的權(quán)限痊班,一般用于對象應(yīng)該有不同的訪問權(quán)的時(shí)候勤婚。
第四種智能指引,是指當(dāng)調(diào)用真實(shí)對象時(shí)涤伐,代理處理另外一些事馒胆。