设计模式-中介者模式

中介者模式定义

中介者模式通过一个中介对象封装一系列的对象交互,中介者是各个对象不需要显式地相互作用,从而使他们松散耦合。

中介者模式使用场景

多个类相互耦合,形成了网状结构,则考虑使用中介者模式进行优化:

  1. 系统中对象之间存在复杂的引用关系,产生的相互依赖关系混乱,难以理解,类似Dubbo的服务治理的概念,从服务之间相互调用的网状依赖关系,通过dubbo变成一个星形结构,每个服务都与注册中心打交道。
  2. 交互的公共行为,如果需要 改变行为,则可以增加新的中介者类

中介者模式结构

在这里插入图片描述
中介者模式包含四个角色:
抽象中介者Meditor : 定义统一的接口,用于各个同事角色之间通信
具体中介者ConcreteMeditor:从具体的同时对象接收消息,向具体同事对象发出命令,协调各同事间的协作
抽象同事类Colleague:每一个同事对象均需要依赖中介者角色,与其他同事间通信时,交给中介者进行转发
具体同事类ConcreteColleague: 负责实现自发行为(selfMethod),转发依赖方法(depmethod)交给中介者协调

中介者模式简单例子

假设要设计一个聊天室,用户向聊天室发送消息,聊天室向所有用户显示消息,实际上就是用户发消息与聊天室显示的过程:
创建User类

package com.lchtest.pattern.meditor.chatroom;

import lombok.Data;

@Data
public class User {
    private String name;
    // 用户通过聊天室发送消息
    //实际上是发送消息到聊天室,聊天室代为转发给其他用户
    private ChatRoom chatRoom;

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

    public void sendMsg(String msg) {
        this.chatRoom.showMsg(this, msg);
    }
}

创建中介者ChatRoom

package com.lchtest.pattern.meditor.chatroom;

public class ChatRoom {

    public void showMsg(User user, String msg) {
        System.out.println("[" + user.getName() + "] : " + msg);
    }
}

测试类

package com.lchtest.pattern.meditor.chatroom;

public class Test {
    public static void main(String[] args) {
        ChatRoom chatRoom = new ChatRoom();
        User mic = new User("mic",chatRoom);
        User jack = new User("jack",chatRoom);
        mic.sendMsg("Hi,I am mic");
        jack.sendMsg("Hello,this is jack.");
    }
}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值