其他設計模式
java單例模式
java建造者模式
java策略模式
java代理模式
java觀察者模式
java適配器模式
java外觀模式
生活中的代理模式
經典劇《武林外傳》中,有一集是秀才讓小六代其求婚,當播放到最后片段,劇中,郭芙蓉對呂秀才狠狠地說:“呂秀才,是你讓小六向我求婚的吧?”。
“造物弄人!”呂秀才慘慘地答道,“這只是一個玩笑”
“哦!。。。玩笑!”郭芙蓉冷笑地說:“我殺了你!”
秀才速奔出去,郭芙蓉口中叫著“你給我站住”,跟著跑了出去。
呂秀才讓小六代其向郭芙蓉求婚,這就是代理模式!
秀才讓小六代其求婚實例講解
步驟1: 創建抽象對象接口(Subject):聲明呂秀才(真實對象)需要讓燕小六(代理對象)幫忙做的事(求婚)
public interface Subject {
public void request();
}
步驟2: 創建真實對象類(RealSubject),即“呂秀才”
public class RealSubject implements Subject{
@Override
public void request() {
System.out.print("芙蓉妹妹,嫁給我");
}
}
步驟3:創建代理對象類(Proxy),即“燕小六”,并通過代理類創建真實對象實例訪問其方法
public class Proxy implements Subject{
RealSubject realSubject;
@Override
public void request() {
if (realSubject==null){
realSubject=new RealSubject();
}
realSubject.request();
}
}
步驟4:客戶端調用
public static void main(String[]args) {
Proxy proxy=new Proxy();
proxy.request();
}
代理模式應用
第一種 遠程代理,也就是為一個對象在不同的地址空間提供局部代表,這樣可以隱藏一個對象存在于不同地址空間的事實。
例如:當我在應用程序項目中加入一個web引用,引用一個WebService,此時項目中會生成一個WebReference的文件夾和一些文件,它們就是代理,這就使得客戶端程序調用代理就可以解決遠程訪問的問題
第二種虛擬代理,是根據需要創建開銷很大的對象,通過它存放實例化需要很長時間的真實對象。
例如:我們打開一個很大的HTML網頁時,里面有很大文字和圖片,你可以很快的看見所有文字,但圖片卻是一張張下載后才能看到,那些未打開的圖片框,就是通過虛擬代理來替代了真實圖片,此時代理存儲了真實圖片的路徑很尺寸。
第三種安全代理,用來控制真實對象方式時的權限,一般用于對象應該有不同的訪問權的時候。
第四種智能指引,是指當調用真實對象時,代理處理另外一些事。