《Design Patterns》Proxy.積跬步系列

Proxy:代理模式

先代碼

共用接口:

package h.l.demo.proxy;
/**
 * 
 * @author: Is-Me-Hl
 * @date: 2020年2月15日
 * @Description: 真實類和代理類的共用接口
 */
public interface Subject {
	// 公共行爲
	public void request();
}

被代理類及代理類:

package h.l.demo.proxy;
/**
 * 
 * @author: Is-Me-Hl
 * @date: 2020年2月15日
 * @Description: 被代理的類,實現了公共的接口
 */
public class RealSubject implements Subject {

	@Override
	public void request() {
		System.out.println("被代理類的行爲...");
	}

}
package h.l.demo.proxy;
/**
 * 
 * @author: Is-Me-Hl
 * @date: 2020年2月15日
 * @Description: 代理類
 */
public class Proxy implements Subject {

	private RealSubject realSubject;

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

}

測試類:

package h.l.demo.proxy;

/**
 * 
 * @author: Is-Me-Hl
 * @date: 2020年1月31日
 * @Description: 測試
 */
public class TestMainEnter {

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

}

測試結果:
在這裏插入圖片描述

後分析

  • 個人建議:寫代碼是件幸福的事,So,do it

代理模式,爲其他對象提供一種代理以控制對這個對象的訪問。從上面的Demo中就可以看出,Proxy代理類實際上是實現了相同的接口,在對應的行爲中,用被代理類去調用了對應的行爲。聯繫生活實際,和網上黃牛代購是一樣的。怎麼理解呢,比如說演唱會門票,實際上官方有提供給大家購票通道,但一般熱門的演唱會老百姓好像也很難能從官方入口買到票,因爲絕大部分的票都被黃牛搶了。我們從黃牛手中買到的票實際上就是官方賣給我們的票。這就是代理的一個過程,舉例好像不是很切當,哈哈,那自個就看代碼理解理解~。反正就表達那個意思對吧,大家都懂的。還有希望相關機關對黃牛這塊能多多監管,別讓黃牛再炒票了!!!

代理模式一般用在什麼場合:

  • 遠程代理,也就是一個對象可以在不同的地址空間提供局部代表,這樣可以隱藏一個對象存在於不同地址空間的事實。在我們的項目中使用WebService可以生成響應的文件夾和一些文件,其實他們就是代理,使得客戶端程序調用代理就可以解決遠程訪問的問題。
  • 虛擬代理,是根據需要創建開銷很大的對象。通過它來存放實例化需要很長時間的真實對象。比如說打開一個很大的HTML網頁,裏面有大量的文字和圖片,但你還是可以很快的打開它,此時你所看到的是所有的文字,但圖片確實一張張下載後纔可以看到,哪些位打開的圖片呢,就是通過虛擬代理來代替了真實的圖片,此時代理存儲了圖片的路徑和尺寸,瀏覽器中就是使用代理模式優化下載的。
  • 安全代理,用來控制真實對象訪問時的權限。
  • 智能指引,是指當調用真實對象時,代理處理另外一些事。如在訪問一個對象前,可以附加一些內務處理。

實際上,看了代理模式的Demo,你會覺得裝飾者模式好像和代理模式挺像的,都是拿被操作對象,進行一些列操作。網上也有一系列的文章在解釋這兩者有什麼區別,其實區別就在於兩個模式的使用時爲了什麼。裝飾者模式是爲了增強某個方法,比如說,手機可以打電話,使用裝飾者模式後手機還可以聽音樂,看電影等。代理模式,則是強調對對象的控制,比如小明要打電話,那麼使用代理模式後,小明的祕書可以幫小明打電話。

其他例子:參考自《大話設計模式》
如男A替男B向女A表白。男A就屬於代理,男B屬於被代理。詳細請自行去參考。


注:以上文章僅是個人總結,若有不當之處,望不吝賜教

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