設計模式之代理模式

代理模式(Proxy Pattern)

定義:

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

顧名思義,代理不就是一般找人去做事情嗎,比如小時候找人打架,你不上,花錢僱人幫你幹仗,這就是代理,兩個有共同的目標,就是揍那個欺負你的人,就是兩個人具備同一個接口,花錢僱人,我不動手,打手動手。其實生活中處處都存在這種模式,文明一點的講,比如找律師打官司,定外賣。

好處:

在某些情況下,一個客戶不想或者不能直接引用另一個對象,而代理對象可以在客戶端和目標對象之間起到中介的作用。

UML:

      

事例演示:

舉個例子吧,就比如現在的社會,拖欠農民工工資問題非常嚴重,王伯打算找個律師去幫他打官司來要回工錢。

那我們先定義一個接口IGetMoney,實現兩個方法,舉報黑心大老闆以及法庭辯護

public interface IGetMoney {

 // 舉報
 void report();

 // 辯護
 void advocacy();    

 }

那麼接下來,王伯出場,實現接口。

public class WangBo implements IGetMoney {

public void report() {

    // 舉報黑心大老闆
    System.out.println("老子要舉報這個黑心老闆,欠錢不還");
}

public void advocacy() {

    // 法庭一通辯護
    System.out.println("某年某月,在工地施工,最後,不給錢。。。。");
}


 }

這年頭自己勢力小,請個律師吧,接下來律師登場。

   public class Lawyer implements IGetMoney {

   private IGetMoney iGetMoney;

   public  Lawyer(IGetMoney money) {

    iGetMoney = money;

   }

   public void report() {

    iGetMoney.report();
   }

  public void advocacy() {

    iGetMoney.advocacy();
  }


 } 

調用實現下。

public class Client {


public static void main(String[] args) {

       WangBo wangbo=new WangBo();
       Lawyer law=new Lawyer(wangbo);
       law.report();
       law.advocacy();

}

}



這單單是王伯一人,假如李伯,張伯,都請這個律師做代理,一對N,這樣的設計模式就方便了很多,寫出李伯,張伯類去實現接口,到時候直接調用就可以。其實說白了,代理模式主要還是使用了java的多態,交給別人去完成,但前提是知根知底,有共同的接口。

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