23种常用设计模式-中介者(Mediator)模式

312次阅读
没有评论

共计 1374 个字符,预计需要花费 4 分钟才能阅读完成。

内容目录

中介者模式

概述

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

类型

 中介者模式属于行为型模式。

介绍

  • 目的:用一个中介对象来封装一系列的对象交互,中介者使各个对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。
  • 主要解决:对象与对象之间存在大量的关联关系,这样势必会导致系统的结构变得很复杂,同时若一个对象发生改变,我们也需要跟踪与之相关联的对象,同时做出相应的处理。
  • 使用场景:当出现多个类互相耦合,形成了紧密的网状结构时,就可以使用中介者模式进行解耦。

示例代码

 这里以用户在一个聊天室为例对中介者模式进行简单实现。

ChatRoom类

 该类作为中介者,会将某位用户发送的信息展示在聊天室中。

package mediator;

import java.util.Date;

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

User类

package mediator;

public class User {
    private String name;
    public User(String name){
        this.name = name;
    }
    public String getName(){
        return name;
    }

    public void sendMessage(String message){
        ChatRoom.showMessage(this,message);
    }
}

 测试代码及运行结果如下:

package mediator;

import org.junit.Test;

public class MediatorTest {
    @Test
    public void mediatorTest(){
        User bob = new User("Bob");
        User alice = new User("Alice");
        bob.sendMessage("Alice, I love you!");
        alice.sendMessage("Sorry Bob, I already have a boyfriend.");
        User joker = new User("Joker");
        joker.sendMessage("Haha, Bob, You and I are so similar");
    }
}
Tue Oct 17 20:23:24 CST 2023 [Bob] : Alice, I love you!
Tue Oct 17 20:23:24 CST 2023 [Alice] : Sorry Bob, I already have a boyfriend.
Tue Oct 17 20:23:24 CST 2023 [Joker] : Haha, Bob, You and I are so similar

对Bob来说,这是一个很悲催的故事,他居然在聊天室中进行了表白,并且表白失败了,小丑笑着对Bob说他们是如此相似。

其它

 由于中介者模式中将所有的职责都移到了中介者类中,也就是说中介类需要处理所有类之间的协调工作,这可能会使中介者演变成一个超级类。所以使用中介者模式时需要权衡利弊。

正文完
 
PG Thinker
版权声明:本站原创文章,由 PG Thinker 2023-10-17发表,共计1374字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)
热评文章
Rust中所有权与借用规则概述

Rust中所有权与借用规则概述

在GC与手动管理内存之间,Rust选择了第三种:所有权机制...