設計模式:代理模式(Proxy)
阿新 • • 發佈:2019-01-04
代理模式:為其他物件提供一種代理以控制對這個物件的訪問
僅僅一句話自然是說明不了代理模式是什麼,我們先看看程式碼例子,什麼是代理:
舉一個栗子吧,假設有個人家裡有困難,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();
}
執行結果:
大眾臉,錢給你,不用謝,我叫紅領巾
這下b同學不用直接給大眾臉送錢了~我們把同學A叫做代理,同學B叫做真實需求。AB都實現了Proxy,這樣就可以在使用真實需求的時候,呼叫代理。
代理模式一般會在一下幾個場合用到:
1.遠端代理,為一個物件在不同的地址空間提供區域性代表。這樣就可以隱藏一個物件存在於不同地址空間的事實。
2.虛擬代理,根據需要建立開銷很大的物件。通過它來存放例項化很長的真實物件。在真實物件還沒有完全例項化之前,可以先用代理物件代替。
3.安全代理,用來控制真實物件訪問時的許可權。
4.智慧指引,當呼叫真實物件時,代理處理另外一些事情。
代理物件就是真是物件的代表。