第78章

小A:“代理模式一般涉及到哪些角色?”

大B:“抽象角色:聲明真實對象和代理對象的共同接口;代理角色:代理對象角色內部含有對真實對象的引用,從而可以操作真實對象,同時代理對象提供與真實對象相同的接口以便在任何時刻都能代替真實對象。同時,代理對象可以在執行真實對象操作時,附加其他的操作,相當於對真實對象進行封裝。真實角色:代理角色所代表的真實對象,是我們最終要引用的對象。”

使用類圖來表示下三者間的關係:

abstractpublicclassSubject

{

abstractpublicvoidrequest();

}

真實角色:實現了Subject的request()方法。

publicclassRealSubjectextendsSubject

{

publicRealSubject()

{

}

publicvoidrequest()

{

System.out.println(“Fromrealsubject.”);

}

}

代理角色:

publicclassProxySubjectextendsSubject

{

privateRealSubjectrealSubject;//以真實角色作爲代理角色的屬性

publicProxySubject()

{

}

publicvoidrequest()//該方法封裝了真實對象的request方法

{

preRequest();

if(realSubject……null)

{

realSubject=newRealSubject();

}

realSubject.request();//此處執行真實對象的request方法

postRequest();

}

privatevoidpreRequest()

{

//somethingyouwanttodobeforerequesting

}

privatevoidpostRequest()

{

//somethingyouwanttodoafterrequesting

}

}

客戶端調用:

Subjectsub=newProxySubject();

Sub.request();

大B:“由以上代碼可以看出,客戶實際需要調用的是RealSubject類的request()方法,現在用ProxySubject來代理RealSubject類,同樣達到目的,同時還封裝了其他方法(preRequest(),postRequest()),可以處理一些其他問題。另外,如果要按照上述的方法使用代理模式,那麼真實角色必須是事先已經存在的,並將其作爲代理對象的內部屬性。但是實際使用時,一個真實角色必須對應一個代理角色,如果大量使用會導致類的急劇膨脹。”

小A:“如果事先並不知道真實角色,該如何使用代理呢?”

大B:“這個問題可以通過Java的動態代理類來解決。”

第59章第21章第155章第97章第180章第72章第31章第22章第225章第173章第43章第215章第26章第68章第107章第40章第40章第167章第30章第190章第169章第225章第80章第42章第144章第71章第75章第112章第61章第203章第33章第159章第136章第210章第155章第183章第114章第21章第115章第186章第109章第200章第83章第59章第145章第185章第195章第92章第149章第35章第199章第136章第69章第194章第15章第169章第21章第14章第81章第23章第208章第161章第59章第141章第57章第77章第150章第24章第6章第213章第3章第185章第171章第122章第189章第223章第23章第147章第101章第161章第185章第127章第98章第112章第154章第33章第220章第83章第36章第172章第159章第104章第167章第193章第49章第204章第59章第17章第54章第74章
第59章第21章第155章第97章第180章第72章第31章第22章第225章第173章第43章第215章第26章第68章第107章第40章第40章第167章第30章第190章第169章第225章第80章第42章第144章第71章第75章第112章第61章第203章第33章第159章第136章第210章第155章第183章第114章第21章第115章第186章第109章第200章第83章第59章第145章第185章第195章第92章第149章第35章第199章第136章第69章第194章第15章第169章第21章第14章第81章第23章第208章第161章第59章第141章第57章第77章第150章第24章第6章第213章第3章第185章第171章第122章第189章第223章第23章第147章第101章第161章第185章第127章第98章第112章第154章第33章第220章第83章第36章第172章第159章第104章第167章第193章第49章第204章第59章第17章第54章第74章