代理模式:爲其他對象提供一種代理以控制對這個對象的訪問
僅僅一句話自然是說明不了代理模式是什麼,我們先看看代碼例子,什麼是代理:
舉一個栗子吧,假設有個人家裏有困難,A同學知道了這個人的情況,想捐點錢給他,但是又想做好事不留名,於是A同學讓B同學幫忙把錢給這個人。
那麼我們先建一個People類:
class People {
String name;
People(String name) {
this.name = name;
}
}
然後寫一個代理接口,我們這個栗子圍繞捐錢,所以這個接口有一個送錢的方法:
interface Proxy {
void giveMoney();
}
兩個同學分別實現該接口:
class StudentA implements Proxy {
private Proxy p;
StudentA(People pople) {
this.p = new StudentB(pople);
}
@Override
public void giveMoney() {
p.giveMoney();
}
}
class StudentB implements Proxy {
People p;
StudentB(People p) {
this.p = p;
}
@Override
public void giveMoney() {
System.out.println(p.name+"錢給你,不用謝,我叫紅領巾");
}
}
然後調用:
public static void main(String[] args) {
//這個有困難的人叫做大衆臉
People dazhonglian=new People("大衆臉");
StudentA a=new StudentA(dazhonglian);
a.giveMoney();
}
運行結果:
大衆臉,錢給你,不用謝,我叫紅領巾
我們把同學A叫做代理,同學B叫做真實需求。AB都實現了Proxy,這樣就可以在使用真實需求的時候,調用代理。
代理模式一般會在一下幾個場合用到:
1.遠程代理,爲一個對象在不同的地址空間提供局部代表。這樣就可以隱藏一個對象存在於不同地址空間的事實。
2.虛擬代理,根據需要創建開銷很大的對象。通過它來存放實例化很長的真實對象。在真實對象還沒有完全實例化之前,可以先用代理對象代替。
3.安全代理,用來控制真實對象訪問時的權限。
4.智能指引,當調用真實對象時,代理處理另外一些事情。
代理對象就是真是對象的代表。