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); //获得用户交的钱
}
、定义联通大厅(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:在本例中,中介对象就相当于我们的联通大厅,我们都是和联通大厅发生关系,张三、李四和我之间是没有交钱关系的。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值