一、介紹:
1、組成結(jié)構(gòu):
(1)Subject/抽象角色:定義了RealSubject和Proxy的共用接口,這樣就可以在任何使用
? ? ? ?RealSubject的地方都可以使用Proxy
(2)RealSubject/真實(shí)角色:定義Proxy所代表的真實(shí)實(shí)體
(3)Proxy/代理角色:保存一個(gè)引用使得代理可以訪問(wèn)實(shí)體,并提供一個(gè)與Subject的接口相同的
? ? ??方法,這樣可以用Proxy替換實(shí)體。
(4)Client/客戶:訪問(wèn)代理對(duì)象的人
public interface Subject{
public void Request();
}
public class RealSubject implements Subject{
@override
public void Request(){
System.out.println("真實(shí)的請(qǐng)求");
}
}
public class Proxy implements Subject{
RealSubject realSubject;
public Proxy(RealSubject realSubject){
this.realSubject=realSubject;
}
@override
public void Request(){
realSubject.Request();
}
}
main:
Proxy proxy = new Proxy(new RealSubject());
proxy.Request();
2、應(yīng)用場(chǎng)景:
(1)遠(yuǎn)程代理:為一個(gè)對(duì)象在不同的地址空間提供局部代表??呻[藏對(duì)象存在不同地址空間的事實(shí)。例如ws在.net中的應(yīng)用。
(2)虛擬代理:通過(guò)代理來(lái)存放實(shí)例化需要很長(zhǎng)時(shí)間的真實(shí)對(duì)象。例如讓一個(gè)很大的html頁(yè)面立即展開(kāi),可以通過(guò)代理設(shè)置圖片位置為空,先占位打開(kāi)頁(yè)面,然后再慢慢加載圖片后填充。
(3)安全代理:用來(lái)控制真實(shí)對(duì)象訪問(wèn)時(shí)的權(quán)限。例如檢查真實(shí)對(duì)象是否有訪問(wèn)權(quán)限。
(4)智能指引:指調(diào)用真實(shí)的對(duì)象時(shí),代理處理另外一些事。例如計(jì)算真實(shí)對(duì)象的引用次數(shù)。
二、demo:
1、租房
(1)租房接口
public interface Rent{
public void rent();
}
(2)房東
public class Host implements Rent{
@Override
public void rent(){
System.out.println("房東租房");
}
}
(3)代理文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-646667.html
public class Proxy implements Rent{
private Host host;
public Proxy(Host host){
this.host=host;
}
@Override
public void rent(){
host.rent();
}
//增加額外功能
public void see(){
System.out.println("看房");
}
}
(4)客戶文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-646667.html
public static void main(String[]args){
Host host=new Host();
Proxy proxy = new Proxy(host);
proxy.rent();
proxy.see();
}
到了這里,關(guān)于設(shè)計(jì)模式(5)代理模式的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!