1. 程式人生 > >設計模式:代理模式(Proxy)

設計模式:代理模式(Proxy)

代理模式:為其他物件提供一種代理以控制對這個物件的訪問

僅僅一句話自然是說明不了代理模式是什麼,我們先看看程式碼例子,什麼是代理:

舉一個栗子吧,假設有個人家裡有困難,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.智慧指引,當呼叫真實物件時,代理處理另外一些事情。

代理物件就是真是物件的代表。