代理模式:
爲其它對象提供一種代理,以控制對該對象的訪問。代理在客戶與訪問對象之間起到一種中介的做用。還能夠經過代理添加一些額外的功能。
優勢:
1) 客戶只要經過代理就能夠訪問目標對象,代理能夠專一於爲目標對象服務。
2)若是目標方法須要對結果作進一步的處理,只須要對代理中的服務方法進行改進便可,這樣符合軟件設計中的「開關原則」,對修改關閉,對擴展開放。
3)能夠協調調用者與被調用者,在必定程序上實現了鬆散耦合。
缺點:
若是目標對象有多個,則對應的代理就會有多個,這樣會使代碼冗餘,能夠考慮動態代理。
代碼實現:
//抽象主題接口
interface Subject
{
request();
}
//真實主題類
public
class RealSubject
implements Subject
{
public
void request()
{
System.out.println(
"this is RealSubject,requesting...");
}
}
//代理主題類
public
class ProxySubject
implements Subject
{
private RealSubject realSubject;
//保存真實主題的引用
public ProxySubject()
{
}
public ProxySubject(RealSubject realSubject)
{
this.realSubject = realSubject;
}
public
void request()
{
preRequest();
if(realSubject ==
null)
{
realSubject =
new RealSubject();
}
realSubject.request();
postRequest();
}
private
void preRequest()
{
// do sth before request();
}
private
void postRequest()
{
// do sth after request();
}
}
//客戶端
public
class Test
{
public
static
void main(String args[])
{
Subject subject =
new ProxySubject(); subject.request(); } }