代理模式

      其實,代理模式在生活中的應用不少,典型的例如明星的經紀人,外界與明星的聯繫都由經紀人來負責,什麼電話該接進來,什麼活動該拒絕都交給經紀人,這樣在最大程度上保護了明星的隱私。這種模式也符合單一職責約束,明星只用作好本身的事情,其餘的雜事經紀人會搞定的。設計模式

1. 案例場景

      下面,咱們就來用代碼模擬一下明星和經濟人的場景,從而瞭解代理模式的具體用法。ide

      做爲利益共同體,經紀人和明星須要具備共同的行爲,只不過真正作事的是明星,經紀人負責傳話,所以他們須要一個共同Activiey接口:this

public interface Activity {
  public void interview();
  public void arietyShow();
}

      明星類:spa

public class Star implements Activity{

  @Override
  public void interview() {
    System.out.println("明星接受採訪。。。");
  }

  @Override
  public void arietyShow() {
    System.out.println("明星參加綜藝節目。。。");
  }
}

      經紀人類:設計

public class Agent implements Activity{
  Star star;
  public Agent(Star star){
    this.star = star;
  }

  @Override
  public void interview() {
    this.star.interview();
  }

  @Override
  public void arietyShow() {
    this.star.arietyShow();
  }
}

      接下來就能夠模擬一下明星-經紀人這種代理場景的運做了:代理

public class ProxyTest {
  public static void main(String[] args) {
    Agent agent = new Agent(new Star());
    agent.arietyShow();
    agent.interview();
  }
}

      輸出爲:code

明星參加綜藝節目。。。
明星接受採訪。。。

2. 概念定義

      上面簡單介紹了代理模式的概念和具體場景的使用,那麼,代理模式的正式定義是怎樣的呢,Gof四人組給出的定義是:對象

代理模式爲對象提供一個替身,從而控制對這個對象的訪問。blog

      外界的請求經過代理到達實際對象,實際對象的響應經過代理返回給外界。代理模式一個明顯的優勢是限制外界對對象的訪問,從而起到保護對象的做用,缺點是增長了複雜性,並且因爲須要代理作轉換,增長了調用鏈的長度。接口

3. UML結構

      將明顯-經紀人的結構抽象出來,就能夠獲得代理模式的通常結構,以下:

 

4. 結論

      當因爲某種緣由不能將對象直接暴露給外界時,或者須要限制對對象的訪問時,就能夠考慮使用代理模式。本文介紹的代理模式是基於代理對象和實際對象在同一個JVM堆上的情形,除此以外,代理模式還有如下幾種:

  • 遠程代理:控制對遠程對象的訪問
  • 虛擬代理:控制對建立開銷較大的資源的訪問
  • 保護代理:基於權限控制對資源的訪問
  • 其餘的類型就不一一列舉了。。。

5. 參考

<<Head First設計模式>>

<<大話設計模式>>

相關文章
相關標籤/搜索