理解它的唯一區別和簡單的方法是使用構造函數並調用功能方法,即在此處加載圖像。如果你通過實現這個非代理MainFunctionalityClass來實例化你的接口,並且這個實現在這個構造器中加載圖像。然而,使用代理是在MainFunctionalityClass上應用一個包裝器,這次被調用的構造器是Proxy的構造器,這意味着MainFunctionalityClass構造器在這裏被跳過。
class MainFunctionalityClass implements ICommon{
MainFunctionalityClass(){
loadMainFunctionality(); // Costly call
}
}
雖然代理類定義爲:
class Proxy implements ICommon{
private String var;
Proxy(String var){
this.var = var; //NO call to big functionality, not costly
}
callMainFunctionality(){
//uses var, MainFunctionalityClass() called
// Costly call but it is called on demand,
}
class MainClassTest{
public static void main(String[] args){
ICommon p = new Proxy("abcd");
p.callMainFunctionality();
}
}
代理設計模式可用於
- 按需加載大功能懶洋洋地。
- 限制客戶端的
爲了實現它,我們需要先用相同的接口在兩個類,然後使用組成的代理類的操作(上方說明)。
awwww right ..謝謝大家! – Bubu
非常感謝!這是代理模式的正確預期實現嗎? – Bubu