代理模式

文檔查閱說明:

Tongkey

yiibai

runoob

大話設計模式

定義:爲其他對象提供一種代理以控制對這個對象的訪問

使用場景:

● 遠程代理;

● 虛擬代理;

● Copy-on-Write 代理;

● 保護(Protect or Access)代理;

● Cache代理;

● 防火牆(Firewall)代理;

● 同步化(Synchronization)代理;

● 智能引用(Smart Reference)代理

注意事項:

1、和適配器模式的區別:適配器模式主要改變所考慮對象的接口,而代理模式不能改變所代理類的接口。

2、和裝飾器模式的區別:裝飾器模式爲了增強功能,而代理模式是爲了加以控制。

普通代理:

在該模式下,調用者只知代理而不用知道真實的角色是誰,屏蔽了真實角色的變更對高層模塊的影響,真實的主題角色想怎麼修改就怎麼修改,對高層次的模塊沒有任何的影響,只要你實現了接口所對應的方法,該模式非常適合對擴展性要求較高的場合。

強制代理:

強制代理的概念就是要從真實角色查找到代理角色,不允許直接訪問真實角色。高層模塊只要調用getProxy就可以訪問真實角色的所有方法,它根本就不需要產生一個代理出來,代理的管理已經由真實角色自己完成。

動態代理:

根據被代理的接口生成所有的方法,也就是說給定一個接口,動態代理會宣稱“我已經實現該接口下的所有方法了”。

兩條獨立發展的線路。動態代理實現代理的職責,業務邏輯Subject實現相關的邏輯功能,兩者之間沒有必然的相互耦合的關係。通知Advice從另一個切面切入,最終在高層模塊也就是Client進行耦合,完成邏輯的封裝任務。

public abstract class Subject {

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

	@Override
	public void Request() {
		System.out.println("真實的請求");
	}

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

}
public class Test {

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

 

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