文档章节

【行为型】- 中介者模式

ZeroneLove
 ZeroneLove
发布于 02/23 10:40
字数 959
阅读 27
收藏 0

中介者模式: 调停者模式

定义一个中介对象来封装系列对象之间的交互。中介者使各个对象不需要显示地相互引用,从而使其耦合性松散,可独立地改变他们之间的交互。

角色

  • 抽象中介者:定义好同事类对象到中介者对象的接口,用于各个同事类之间的通信。一般包括一个或几个抽象的事件方法,并由子类去实现。

  • 中介者实现类:从抽象中介者继承而来,实现抽象中介者中定义的事件方法。从一个同事类接收消息,然后通过消息影响其他同时类。

  • 同事类:如果一个对象会影响其他的对象,同时也会被其他对象影响,那么这两个对象称为同事类,同事类之间必须通过中介者才能进行消息传递。


抽象中介者:AbstractMediator

package com.zhiwei.mediator;

public interface AbstractMediator {
	
    void send(String fromPeron, String toPerson, String Message);

    void add(AbstractColleague car);
}

中介者实现类:ConcreteMediator

package com.zhiwei.mediator;

import java.util.Map;
import java.util.HashMap;

/**
 * 具体中介者:负责对象之间的交互:QQ群
 * @author Yang ZhiWei
 */
public class ConcreteMediator implements AbstractMediator {

    /**
        * 所有的同事:QQ群成员
        */
    private Map<String,AbstractColleague> map = new HashMap<String,AbstractColleague>();

    /**
        * 发送消息:替代同事发送消息:通过接口所有的同事共享
        */
    public void send(String fromPeron, String toPerson, String message) {
        AbstractColleague fromPeronAC = (AbstractColleague)map.get(fromPeron);
        AbstractColleague toPersonAC = (AbstractColleague)map.get(toPerson);
        toPersonAC.receiveMessage(fromPeronAC,message);
    }

    /**
     * 添加同事:添加群成员
     */
    public void add(AbstractColleague abstractColleague) {
        //将同事和中介者进行关联绑定
    	abstractColleague.setMediator(this); 
        map.put(abstractColleague.getName(), abstractColleague);
    }
}

抽象同事类:AbstractColleague

package com.zhiwei.mediator;

/**
 * 抽象同事类:定义整个系统中的基本成员的属性方法
 * 类似:QQ群成员
 * @author Yang ZhiWei
 *
 */
public abstract class AbstractColleague {

    private AbstractMediator abstractMediator;

    /**
        * 同事名称:类似QQ群成员名称
        * @return
        */
    public abstract String getName();

    /**
        * 同事方法:接受QQ群信息
        * @param fromPerson 发送消息的人
        * @param message 接受的内容
        */
    public abstract void receiveMessage(AbstractColleague fromPerson, String message);

    /**
        * 同事方法:发送QQ群信息
        * @param fromPerson 消息发送者
        * @param toPerson 消息接收者
        * @param message 消息内容
        */
    public void sendMessage(String fromPerson, String toPerson, String message) {
        abstractMediator.send(fromPerson, toPerson, message);
    }

    public AbstractMediator getMediator() {
        return abstractMediator;
    }

    public void setMediator(AbstractMediator abstractMediator) {
        this.abstractMediator = abstractMediator;
    }

}

具体同事类:

package com.zhiwei.mediator;

public class ColleagueA extends AbstractColleague {
	
    private String name = "A";

    public String getName() {
        return name;
    }

    @Override
    public void receiveMessage(AbstractColleague fromPerson, String message) {
        System.out.println(name+"接受来自"+fromPerson.getName()+"的消息:"+message);
    }
}
package com.zhiwei.mediator;

public class ColleagueB extends AbstractColleague {

    private String name = "B";

    public String getName() {
        return name;
    }

    @Override
    public void receiveMessage(AbstractColleague fromPerson, String message) {
        System.out.println(name+"接受来自"+fromPerson.getName()+"的消息:"+message);
    }
}

测试代码:

//中介者:QQ群
AbstractMediator abstractMediator = new ConcreteMediator();  

//同事:QQ群成员
AbstractColleague a = new ColleagueA(); 
AbstractColleague b = new ColleagueB();

//QQ群添加成员
abstractMediator.add(a); 
abstractMediator.add(b);

//代替QQ群成员发送消息
a.sendMessage("A", "B", "Nice to meeting you!");
b.sendMessage("B", "A", "Nice to meeting you too!");

通俗解释:

QQ通信:

A发送消息给B,首先A注册QQ账号,这样客户A和腾讯的系统就产生绑定属性,A绑定腾讯系统,利用腾讯的功能,反之腾讯也会绑定客户的身份信息,为其提供服务。当A发送消息给B后,首先处理消息的是腾讯系统,然后腾讯系统检查数据库是否有B的信息,如果有则发送信息给B。

该流程腾讯系统充当中介者的角色,主要维护同事对象组,而A/B充当同事的角色,借助于腾讯系统这个中介者进行通讯。

© 著作权归作者所有

ZeroneLove
粉丝 5
博文 164
码字总数 133695
作品 0
深圳
高级程序员
私信 提问
设计原则和设计模式_Index

设计原则 1.1 什么是设计原则 ?(https://my.oschina.net/jimilee/blog/732569) 1.2 设计原则如何用? 1.3 设计原则详解 1.4 30分钟快速理解面向对象设计原则 2. 设计模式 2.1 什么时候使用设...

无寄语
2016/08/14
1
0
设计模式的学习(13)中介者模式

中介者模式 中介者模式(Mediator Pattern)又称为调停者模式,是用来降低多个对象和类之间的通信复杂性。这种模式提供了一个中介类,中介者通常处理不同对象之间的通信,使各对象不需要显式...

杨健-YJ
2018/12/29
16
0
我的Java设计模式-中介者模式

*本篇文章已授权微信公众号 guolin_blog (郭霖)独家发布 小时候钟爱战争片,《地道战》、《鸡毛信》、《铁道游击队》一系列的老电影,咦~想起都激动得起鸡皮疙瘩。不过觉得特别逗的是,电影...

Jet啟思
2018/01/17
0
0
《JavaScript设计模式与开发实践》模式篇(11)—— 中介者模式

中介者模式的作用就是解除对象与对象之间的紧耦合关系。增加一个中介者对象后,所有的 相关对象都通过中介者对象来通信,而不是互相引用,所以当一个对象发生改变时,只需要通知 中介者对象即...

嗨呀豆豆呢
2018/12/23
0
0
Java设计模式之-中介者模式(Mediator)

中介者模式,又叫调停者模式。我看的书里面是叫做调停者的,我个人认为没有“中介者”这个名字容易理解。 中介者模式:在一个庞大系统中,多个类之间需要进行信息的交换,从而引发后续的行为...

Mock2052
2017/11/28
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Xss过滤器(Java)

问题 最近旧的系统,遇到Xss安全问题。这个系统采用用的是spring mvc的maven工程。 解决 maven依赖配置 <properties><easapi.version>2.2.0.0</easapi.version></properties><dependenci......

亚林瓜子
44分钟前
4
0
Navicat 快捷键

操作 结果 ctrl+q 打开查询窗口 ctrl+/ 注释sql语句 ctrl+shift +/ 解除注释 ctrl+r 运行查询窗口的sql语句 ctrl+shift+r 只运行选中的sql语句 F6 打开一个mysql命令行窗口 ctrl+l 删除一行 ...

低至一折起
今天
7
0
Set 和 Map

Set 1:基本概念 类数组对象, 内部元素唯一 let set = new Set([1, 2, 3, 2, 1]); console.log(set); // Set(3){ 1, 2, 3 } [...set]; // [1, 2, 3] 接收数组或迭代器对象 ...

凌兮洛
今天
1
0
PyTorch入门笔记一

张量 引入pytorch,生成一个随机的5x3张量 >>> from __future__ import print_function>>> import torch>>> x = torch.rand(5, 3)>>> print(x)tensor([[0.5555, 0.7301, 0.5655],......

仪山湖
今天
5
0
OSChina 周二乱弹 —— 开发语言和语言开发的能一样么

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @花间小酌:#今日歌曲推荐# 分享The Score的单曲《Revolution》 《Revolution》- The Score 手机党少年们想听歌,请使劲儿戳(这里) @批判派...

小小编辑
今天
2.9K
19

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部