java開發,必須要懂的23種設計模式——代理模式(靜態代理模式)

目錄

 

代理模式是什麼?

靜態代理模式小案例

代碼:

UML類圖:

疑問(希望看到的大佬解答):

優缺點:

優點:

缺點:


代理模式是什麼?

日常中聽到“代理”最多的地方,應該是XX銷售代理。

比如面膜銷售代理

假如銷售面膜這個功能,本來是你擁有的,我當你的銷售代理時,我就也可以進行銷售面膜功能了。

 

那,我當你的代理,有什麼好處呢?

1. 你的銷路寬了。

   我有我的人脈圈,能把面膜賣給我的親朋好友。

2. 你承受風險小了。

    面膜出現質量問題時,親朋好友是來我這要說法,他們不認識你,只知道我賣給他們的。

 

所以說,“代理”其實就是一種,通過另一個人實行你的銷售功能,同時能夠增強你的銷路、降低你風險的一種商業行爲。

 

也就是說,在編程中,模仿這種商業模式,讓另一個類去實行本類的功能,同時擴展功能、增加安全性的一種模式。

靜態代理模式是什麼

 

知道代理是啥了,再來簡單聊一下靜態。

 

靜態,靜態,靜止狀態。就是說,只能代理固定的類,就叫做靜態代理。

 

靜態代理是代理模式中的一種。代理模式還有:動態代理和Cglib代理,這些我會再其他文章講解。

 

靜態代理模式小案例

 

 

接下來,咱們用代碼把上邊代理銷售面膜來實現一波。

 

代碼:

賣面膜接口

package 代理模式.靜態代理;

public interface IMaskSeller {
	// 買面膜方法
	void sellMask();
}

你——被代理者

package 代理模式.靜態代理;
// 你是被代理對象
public class You implements IMaskSeller {

	@Override
	public void sellMask() {
		System.out.println("賣面膜");
	}

}

我——代理類

package 代理模式.靜態代理;
// 我代理你
public class Me implements IMaskSeller {
	
	private You you;
	
	public Me(You you) {
		this.you=you;
	}

	@Override
	public void sellMask() {
		/*
		 * 相同的方法,增強後,在執行買面膜方法
		 * 此處可以實現多種增強
		 * 		1. 增加日誌
		 * 		2. 安全驗證
		 * 		3. 數據驗證
		 * 		4. 或者直接飛起以前的方法,此處重寫
		 * 		等
		 * 		等
		 */
		System.out.println("我是代理,能把面膜賣給自己的盆友");
		you.sellMask();
	}

}

我的朋友——客戶端

package 代理模式.靜態代理;
// 相當於客戶端
public class MyFriend {

	public static void main(String[] args) {
		// 此處是個疑問點
		You you = new You();
		Me me = new Me(you);
		me.sellMask();
	}

}

UML類圖:

看不懂UML圖的童鞋,可以進我的博客主頁,學習UML類圖。

 

如上所示:

1. 被代理者,代理者,同時實現統一接口。

2. 代理者調用被代理者的方法。

3. 客戶端,實例化被代理類,傳遞給代理類,調用代理類的方法實現業務。

 

疑問(希望看到的大佬解答):

 

靜態代理模式,代理的是一個類,爲什麼不在代理類裏邊直接實例化被代理類,反而要到客戶端去實例化?

學習還是要繼續,繼續帶着疑問學下去,如果以後理解了,會在這裏寫出答案。

當然,我更希望路過的大佬給些指點。

優缺點:

優點:

我已經在代碼的註釋裏邊寫的很清楚了:

可以實現多種增強
         *         1. 增加日誌
         *         2. 安全驗證
         *         3. 數據驗證
         *         4. 或者直接飛起以前的方法,此處重寫
         *         等
         *         等

 

缺點:

當代理類很多時,接口增加一個方法所有的代理類全部都得實現一遍。!

 

以上爲個人所學和總結,如果那裏不對,希望看到的大佬指正批評!

 

 

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