设计模式之中介者模式

概述

中介者模式是用来降低多个对象和类之间通信的复杂性。当某些对象之间的作用发生改变时,不会立即影响其他的一些对象之间的作用。保证这些作用可以彼此独立变化。

使用场景

  • 系统中对象之间存在比较复杂的引用关系,导致它们之间的依赖关系结构混乱而且难以复用该对象。
  • 想通过一个中间类来封装多个类中的行为,而又不想生成太多的子类。

具体实现

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

首先,我们创建一个中介类:

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

然后我们创建一个用户类:

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);
   }
}

最后我们来写个demo:

public class Demo {
   public static void main(String[] args) {
      User robert = new User("Robert");
      User john = new User("John");
 
      robert.sendMessage("Hi! John!");
      john.sendMessage("Hello! Robert!");
   }
}

执行程序,输出结果:

 [Robert] : Hi! John!
 [John] : Hello! Robert!

总结

在面向对象的语言中,一个类必然会与其他类产生依赖关系,如果产生的依赖关系过于复杂,不过用中介者模式去实现。
优点:

  • 降低了类的复杂度,将一对多转化成了一对一。
  • 各个类之间的解耦。
  • 符合迪米特原则。

缺点:

  • 中介者会庞大,变得复杂难以维护。
©️2020 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页