【设计模式】中介者模式 ( 简介 | 适用场景 | 优缺点 | 代码示例 )

举报
韩曙亮 发表于 2022/01/12 23:02:35 2022/01/12
【摘要】 文章目录 一、中介者模式简介二、中介者模式适用场景三、中介者模式优缺点四、中介者模式 与 观察者模式五、中介者模式 代码示例1、聊天室2、用户3、运行实例 一、中介者模式...





一、中介者模式简介



中介者模式 : 定义 一个 封装一组对象 如何 交互对象 ;

通过使 对象 明确地 相互引用 , 促进 松散耦合 , 允许 独立改变 它们之间的 交互 ;


中介者模式类型 : 行为型 ;





二、中介者模式适用场景



中介者模式适用场景 :

  • 引用关系复杂 : 系统中 对象之间 存在 复杂的 引用关系 , 产生的 相互依赖关系 结构混乱 , 难以理解 ;
  • 改变行为 : 交互的 公共行为 , 如果 需要 改变行为 , 可以 增加新的 中介者 类 ; ( 通过增加新的中介者类 , 达到扩展的目的 )

多人聊天室 就是一个 中介者模式 场景 , 一个人发言时 , 需要传达给每个人 , 如果没有聊天室 , 需要对每个人都说一遍 , 如果有中介者 , 就由中介者负责将发言传达给每个人 ;





三、中介者模式优缺点



中介者模式优点 :

  • 降低复杂度 :一对多 转化为 一对一 , 降低了 程序复杂程度 ;
    如 : 聊天室中有 8 8 8 个人 , 如果要一对一进行交互 , 需要交互 7 7 7 次 ; 使用了中介者模式后 , 变成一对一 , 只要将交互内容交给中介者就可以了 , 中介者负责与其余 7 7 7 人进行交互 ;

  • 解耦 : 实现了 类之间的解耦 操作 ;
    如 : 聊天室中有 8 8 8 个人 , 每个人都需要耦合另外 7 7 7 个 , 即持有另外 7 7 7 个对象 , 使用了中介者模式之后 , 8 8 8 个人只需要持有 中介者 对象即可 , 8 8 8 个人之间不再进行相互耦合 ;


中介者模式缺点 : 如果在 业务场景 中 中介者 数量过多 , 会导致系统 复杂性增加 ;
( 设计模式之间 , 也是一个相互平衡的过程 )





四、中介者模式 与 观察者模式



中介者模式 与 观察者模式 :

这两个模式经常 结合起来使用 , 使用 观察者模式 实现 中介者模式 中 , 角色间的通信 ;





五、中介者模式 代码示例



业务场景 : 聊天室 , 多人在聊天室中聊天 ;

聊天室 实例 只有一个 , 用户可以创建多个 , 并持有 聊天室 引用 ;


1、聊天室


package mediator;

/**
 * 聊天室 , 中介者模式中的中介者
 *      该类实例在整个业务场景中只有一个
 */
public class ChatRoom {
    public static void showMessage(User user, String message){
        System.out.println(user.getName() + " : " + message);
    }
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

2、用户


package mediator;

/**
 * 中介者模式中 与 中介者 交互的对象
 *      该类实例对象 , 需要创建多个
 */
public class User {
    private String name;

    public User(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    /**
     * 主要业务逻辑 , 群聊时发送消息
     * @param message
     */
    public void sendMessage(String message) {
        ChatRoom.showMessage(this, message);
    }
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

3、运行实例


package mediator;

public class Main {
    public static void main(String[] args) {
        User tom = new User("Tom");
        User jerry = new User("Jerry");
        User trump = new User("Trump");

        tom.sendMessage("I'm cat");
        jerry.sendMessage("I'm mouse");
        trump.sendMessage("MAGA");
    }
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

文章来源: hanshuliang.blog.csdn.net,作者:韩曙亮,版权归原作者所有,如需转载,请联系作者。

原文链接:hanshuliang.blog.csdn.net/article/details/119707262

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。