JAVA設計模式學習第四天 設計模式之Mediator——聯通篇

中午吃完飯沒事,我(133用戶)就和 同事張三(130用戶)、李四(131用戶)一塊去高新聯通大廳(gaoxinLianTongHall)交手機費。到了高新聯通大廳(gaoxinLianTongHall),我們發現因爲是中午吃飯時間大廳裏只有一個工作人員,因此我們只好一個一個來辦理交費業務了,首先是張三(130用戶),然後是李四(131用戶),最後是我(133用戶)。

好了,讓我們看看這個過程如何來實現呢:

1、我們先定義聯通大廳(LianTongHall)這樣一個接口類:
public interface LianTongHall {
    public void identifyUserType(LianTongUser user, String
     type); //判斷用戶類型

   public void getUserMoney(String type); //獲得用戶交的錢
}
2、定義聯通大廳(LianTongHall)的具體實現類:
public class ConcreteLianTongHall implements LianTongHall {
  private User130 user130;
  private User131 user131;
  private User133 user133;
 
  public void identifyUserType(LianTongUser user, String type) {
    if (type == "130") {
      user130 = (User130) user; //130用戶
    }
    else if (type == "131") {
      user131 = (User131) user; //131用戶
    }
    else if (type == "133") {
      user133 = (User133) user; //133用戶
    }
  }
 
  public void  getUserMoney(String type) {  //得到用戶交的錢
    if (type == "130") {
      user131.pleaseWait();  //131用戶請先等
      user133.pleaseWait();  //133用戶請先等
    }
    else if (type == "131") {
      user130.pleaseWait();   //130用戶請先等
      user133.pleaseWait();   //133用戶請先等
    }
    else if (type == "133") {
      user130.pleaseWait();  //130用戶請先等
      user131.pleaseWait();  //131用戶請先等
    }
  }
}
3、定義聯通用戶(LianTongUser)接口類:
public interface LianTongUser {
  public void HandInMoney();  //交錢
  public void pleaseWait();   //等待
}
4、定義聯通用戶(LianTongUser)接口的實現類:
A:130用戶(User130)
public class User130 implements LianTongUser {
  private final String type = "130";
  private LianTongHall liantongHall;
 
  public User130(LianTongHall liantongHall) {
      this.liantongHall = liantongHall;
      liantongHall.identifyUserType(this, type);  //聯通大廳判斷是那種用戶
  }
  public void HandInMoney() {
      System.out.println("130用戶正在交錢!");
      liantongHall.getUserMoney(type);  //聯通大廳得到用戶交的錢
  }
  public void pleaseWait() {
      System.out.println("130用戶請先等一會!");
  }
}
B:131用戶(User131)
public class User131 implements LianTongUser {
  private final String type = "131";
  private LianTongHall liantongHall;
 
  public User131(LianTongHall liantongHall) {
      this.liantongHall = liantongHall;
      liantongHall.identifyUserType(this, type); //聯通大廳判斷是那種用戶
  }
  public void HandInMoney() {
      System.out.println("131用戶正在交錢!");
      liantongHall.getUserMoney(type); //聯通大廳得到用戶交的錢
  }
 
  public void pleaseWait() {
      System.out.println("131用戶請先等一會!");
  }
}
C:133用戶(User133)
public class User133 implements LianTongUser {
  private final String type = "133";
  private LianTongHall liantongHall;
 
  public User133(LianTongHall liantongHall) {
      this.liantongHall = liantongHall;
      liantongHall.identifyUserType(this, type); //聯通大廳判斷是那種用戶
  }
  public void HandInMoney() {
      System.out.println("133用戶正在交錢!");
      liantongHall.getUserMoney(type); //聯通大廳得到用戶交的錢
  }
 
  public void pleaseWait() {
      System.out.println("133用戶請先等一會!");
  }
}
 
5、編寫測試類:
public class Test  {
    public static void  main(String[] args) {
        LianTongHall gaoxinLianTongHall = new ConcreteLianTongHall(); //高新聯通大廳
        User130 zhangsan = new User130(gaoxinLianTongHall); //張三
        User131 lisi = new User131(gaoxinLianTongHall);   //李四
        User133 me = new User133(gaoxinLianTongHall);   //我
 
        zhangsan.HandInMoney();  //張三交錢
        lisi.HandInMoney();  //李四交錢
        me.HandInMoney();   //我交錢
    }
}                  
6、說明:
A:Mediator定義:用一箇中介對象來封裝一系列關於對象交互行爲。
B:每個成員都必須知道中介對象,並且和中介對象聯繫,而不是和其他成員聯繫。
C:在本例中,中介對象就相當於我們的聯通大廳,我們都是和聯通大廳發生關係,張三、李四和我之間是沒有交錢關係的。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章