設計模式:代理模式

一、理解

代理模式(Proxy),爲其他對象提供一種代理以控制對這個對象的訪問。從模式的命名我們就可以意識到,應該是通過一個類代替另一個類進行相關的操作,類似於使用者的意思。“你授權給我使用你的功能,我可以在這個地方代替你行事相應的功能”,值得注意的是,代理行使的功能其實就是功能所有者的功能。以下是代理模式的功能圖:

那就有人會問,我既然能使用某各類的功能,我爲什麼要多此一舉,找一個代理類行使功能呢?那麼這就涉及了代理模式的應用,其實代理模式的應用很廣泛,它大致有以下幾種應用。第一,就是遠程代理,也就是一個對象在不同地址空間提供局部代代表,這樣就可以隱藏一個對象存在不同地址空間的事實、就比如你在.NET的Web應用中引用WebService,此時就會在項目中生成一個WebReference的文件和一些文件夾,其實這些就是代理,使得客戶端只要調用代理,就可以解決遠程訪問的問題。第二,就是虛擬代理,就是根據需要創建開銷很大的對象,通過它來存放實例化需要時間很長的對象,這樣就能達到性能的最優化。第三,就是安全代理,用來控制真實對象訪問時的權限,一般用於對象有不同訪問權限的時候。第四,就是智能指引,是指當調用真實對象時,代理處理另一些事情。

二、實現

public abstract class Subject {
	public abstract void Request();
}
public class RealSubject extends Subject {

	@Override
	public void Request() {
		// 真實需求的操作

	}

}
public class Proxy extends Subject {
	RealSubject realSubject;

	@Override
	public void Request() {
		if(realSubject == null) {
			realSubject = new RealSubject();
		}
		realSubject.Request();
	}

}
public class Main {

	public static void main(String[] args) {
		Proxy proxy = new Proxy();
		proxy.Request();

	}

}

 

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