中介者模式与解释器模式(1)

简介: 中介者模式与解释器模式(1)

一、中介者模式介绍


为什么引入中介模式?


在现实生活中,中介者的存在是不可缺少的,如果没有了中介者,我们就不能与远方的朋友进行交流了。而在软件设计领域,为什么要使用中介者模式呢?如果不使用中介者模式的话,各个同事对象将会相互进行引用,如果每个对象都与多个对象进行交互时,将会形成如下图所示的网状结构。


image.png


从上图可以发现,如果不使用中介者模式的话,每个对象之间过度耦合,这样的既不利于类的复用也不利于扩展。如果引入了中介者模式,那么对象之间的关系将变成星型结构,采用中介者模式之后会形成如下图所示的结构:


image.png


从上图可以发现,使用中介者模式之后,任何一个类的变化,只会影响中介者和类本身,不像之前的设计,任何一个类的变化都会引起其关联所有类的变化。这样的设计大大减少了系统的耦合度。


中介者模式(Mediator Pattern)是用来降低多个对象和类之间的通信复杂性。这种模式提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护。中介者模式属于行为型模式。


优点:

1、减少类间依赖,将多对多依赖转换为一对多,降低了类之间耦合;

2、类间各司其职,符合迪米特法则。


缺点:

中介者模式中将原本多个对象直接的相互依赖变成了中介者和多个同事类的依赖关系。当同事类越多时候,中介者就越臃肿,变得复杂且难以维护。


二、中介者模式实例

实现

我们通过聊天室实例来演示中介者模式。实例中,多个用户可以向聊天室发送消息,聊天室向所有的用户显示消息。我们将创建两个类 ChatRoom 和 User。User 对象使用 ChatRoom 方法来分享他们的消息。


MediatorPatternDemo,我们的演示类使用 User 对象来显示他们之间的通信。


image.png


步骤 1

创建中介类。


import java.util.Date;
public class ChatRoom {
   public static void showMessage(User user, String message){
      System.out.println(new Date().toString()
         + " [" + user.getName() +"] : " + message);
   }
}


步骤2


public class User {
   private String name;
   public String getName() {
      return name;
   }
   public void setName(String name) {
      this.name = name;
   }
   public User(String name){
      this.name  = name;
   }
   public void sendMessage(String message){
      ChatRoom.showMessage(this,message);
   }
}


步骤 4

执行程序,输出结果:


Thu Jan 31 16:05:46 IST 2013 [Robert] : Hi! John!
Thu Jan 31 16:05:46 IST 2013 [John] : Hello! Robert!



目录
相关文章
|
7月前
行为型 中介者模式
行为型 中介者模式
40 0
|
设计模式 移动开发 数据库
行为型设计模式10-解释器模式
行为型设计模式10-解释器模式
101 1
|
设计模式 调度
行为型设计模式09-中介者模式
行为型设计模式09-中介者模式
45 0
|
7月前
|
设计模式 SQL 自然语言处理
行为型 解释器模式
行为型 解释器模式
45 0
|
7月前
行为型 状态模式
行为型 状态模式
45 0
|
设计模式 算法 Java
设计模式-行为型模式:解释器模式
设计模式-行为型模式:解释器模式
|
设计模式 Java
设计模式-行为型模式:中介者模式
设计模式-行为型模式:中介者模式
|
设计模式 JavaScript 编译器
我学会了,解释器模式
解释器模式属于行为型模式,这个类型的设计模式总结出了 类、对象之间的经典交互方式,将类、对象的行为和使用解耦了,花式的去使用对象的行为来完成特定场景下的功能。
91 0
我学会了,解释器模式
|
设计模式 机器学习/深度学习
我学会了,中介者模式
中介者模式属于行为型模式,这个类型的设计模式总结出了 类、对象之间的经典交互方式,将类、对象的行为和使用解耦了,花式的去使用对象的行为来完成特定场景下的功能。
123 0
我学会了,中介者模式
|
前端开发 调度