設計模式:代理模式(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.智能指引,當調用真實對象時,代理處理另外一些事情。


代理對象就是真是對象的代表。











發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章