设计模式之Mediator——联通篇(原创)

类别:Java 点击:0 评论:0 推荐:

设计模式之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:在本例中,中介对象就相当于我们的联通大厅,我们都是和联通大厅发生关系,张三、李四和我之间是没有交钱关系的。

 

本文地址:http://com.8s8s.com/it/it14600.htm