设计模式-中介者模式(Mediator)

概述

  • 定义 : 定义一个封装一组对象如何交互的对象
  • 通过使对象明确的相互引用来促进松散耦合, 并允许独立的改变它们的交互
  • 类型 : 行为型

适用场景

  • 系统中对象之间存在复杂的引用关系, 产生的相互依赖关系结构混乱且难以理解
  • 交互的公共行为, 如果需要改变行为则可以增加新的中介者类

优点

  • 将一对多转化成了一对一, 降低了程序复杂度
  • 类之间解耦

缺点

  • 中介者过多, 导致系统复杂

模式角色

  • Mediator(中介者) : 中介者定义一个接口用于与各同事(Colleague)对象通信。

  • ConcreteMediator(具体中介者) :

    • 具体中介者通过协调各同事对象实现协作行为。
    • 了解并维护它的各个同事。
  • Colleague class(同事类) :

    • 每一个同事类都知道它的中介者对象。
    • 每一个同事对象在需与其他的同事通信的时候,与它的中介者通信

代码实现

场景

群聊场景, 每个用户将消息发送到群中, 在群中展示, 不具体发送到个人, 类与中介者模式对应关系如下:

  • Mediator接口 : 对应中介者模式中的Mediator(中介者)角色
  • GroupMediator : 对应中介者模式中的ConcreteMediator(具体中介者)角色
  • User : 对应中介者模式中的Colleague class(同事类)角色

UML类图

在这里插入图片描述

代码

Mediator接口 :

/**
 * Mediator(中介者)
 *
 * @author 七夜雪
 * @create 2018-11-24 18:56
 */
public interface Mediator {
    public void sendMsg(User user, String msg);
}

GroupMediator :

/**
 * 群聊类-中介者模式中的ConcreteMediator(具体中介者)角色
 *
 * @author 七夜雪
 * @create 2018-11-24 18:57
 */
public class GroupMediator implements Mediator {

    @Override
    public void sendMsg(User user, String msg) {
        System.out.println(user.getName() + " : " + msg);
    }
}

User :

/**
 * 用户类-中介者模式中的Colleague class
 *
 * @author 七夜雪
 * @create 2018-11-24 18:56
 */
public class User {
    private String name;

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

    public String getName() {
        return name;
    }
}

测试代码 :

/**
 * 测试类
 *
 * @author 七夜雪
 * @create 2018-11-24 18:59
 */
public class Client {

    public static void main(String[] args) {
        Mediator mediator = new GroupMediator();
        User user1 = new User("萧忆情");
        User user2 = new User("舒靖容");
        mediator.sendMsg(user1, "听雪楼中听雪落");
        mediator.sendMsg(user2, "彼岸花开彼岸零");
    }

}

测试结果 :

萧忆情 : 听雪楼中听雪落
舒靖容 : 彼岸花开彼岸零
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值