目录
说明
- 行为型模式之一,其他还有命令模式、模板方法模式、访问者模式、观察者模式、迭代器模式、备忘录模式、解释器模式(Interpreter模式)、状态模式、策略模式、职责链模式(责任链模式)
-
中介者模式(Mediator Pattern,又叫调停者模式):将对象间网状的联系转化为以中介为中心的星形结构。
-
优缺点都是集中控制
-
中介者承担了较多的责任,一旦中介者出现了问题,整个系统就会受到影响
实现方式
唐僧师徒四人西天取经,路途上难免需要和众多仙家沟通来往。如果一对一打电话,就得记住对方的电话号码,这属实麻烦。这时候大家都一致认为用微信来沟通,更加方便快捷。微信在其中就起到中介者得作用。
public class MediatorTest {
public static void main(String[] args) {
// 实例化个微信
WeChat weChat = new WeChat();
// 双方注册成为微信用户
WeChatUser jadeEmperor = new JadeEmperor(weChat);
WeChatUser tangMonk = new TangMonk(weChat);
// 微信完成注册
weChat.setTangMonk(jadeEmperor);
weChat.setJadeEmperor(tangMonk);
// 双方发送消息,通过微信(中介者)转发
tangMonk.sendMessage("老板老板,我是小唐呀。", jadeEmperor);
jadeEmperor.sendMessage("唐长老放心,取经之路已帮你打点好了", tangMonk);
}
}
/**
* 通讯工具(抽象的中介者类)
* <p>
* @author ZRH
* @date 2020/7/29
* @version 1.0.0
*/
abstract class CommunicationTool {
/**
* 抽象的发送的消息方法
* <p>
*
* @param message
* @param weChatUser
* @author : ZRH
* @version : 1.0.0
* @date : 2020-07-24
*/
public abstract void send(String message, WeChatUser weChatUser);
}
/**
* 微信用户
* <p>
* @author ZRH
* @date 2020/7/29
* @version 1.0.0
*/
abstract class WeChatUser {
private CommunicationTool communicationTool;
public WeChatUser(CommunicationTool communicationTool) {
this.communicationTool = communicationTool;
}
/**
* 通过中介者发送消息
* <p>
*
* @param message,people
* @author : ZRH
* @version : 1.0.0
* @date : 2020-07-24
*/
public void sendMessage(String message, WeChatUser weChatUser) {
this.communicationTool.send(message, weChatUser);
}
/**
* 收到中介者的通知
* <p>
*
* @param message
* @author : ZRH
* @version : 1.0.0
* @date : 2020-07-24
*/
public abstract void getNotifyMessage(String message);
}
/**
* 具体用户,唐僧
* <p>
*
* @author ZRH
* @version 1.0.0
* @date 2020/7/24
*/
class TangMonk extends WeChatUser {
public TangMonk(CommunicationTool communicationTool) {
super(communicationTool);
}
/**
* 收到微信发来的消息
* <p>
*
* @param message
* @author ZRH
* @date 2020-07-24
* @version 1.0.0
*/
@Override
public void getNotifyMessage(String message) {
System.out.println("唐僧 收到了消息: " + message);
}
}
/**
* 具体用户,玉皇大帝
* <p>
*
* @author ZRH
* @version 1.0.0
* @date 2020/7/24
*/
class JadeEmperor extends WeChatUser {
public JadeEmperor(CommunicationTool communicationTool) {
super(communicationTool);
}
/**
* 收到微信发来的消息
* <p>
*
* @param message
* @author ZRH
* @date 2020-07-24
* @version 1.0.0
*/
@Override
public void getNotifyMessage(String message) {
System.out.println("玉皇大帝 收到了消息: " + message);
}
}
/**
* 微信
* <p>
*
* @author ZRH
* @version 1.0.0
* @date 2020/7/24
*/
class WeChat extends CommunicationTool {
private WeChatUser tangMonk;
private WeChatUser jadeEmperor;
public void setTangMonk(WeChatUser weChatUser) {
this.tangMonk = weChatUser;
}
public void setJadeEmperor(WeChatUser weChatUser) {
this.jadeEmperor = weChatUser;
}
/**
* 抽象的发送的消息方法
* <p>
*
* @param message
* @param weChatUser
* @author : ZRH
* @version : 1.0.0
* @date : 2020-07-24
*/
@Override
public void send(String message, WeChatUser weChatUser) {
if (weChatUser instanceof JadeEmperor) {
this.tangMonk.getNotifyMessage(message);
} else if (weChatUser instanceof TangMonk) {
this.jadeEmperor.getNotifyMessage(message);
} else {
System.out.println("查无此人");
}
}
}
应用场景
-
MVC模式,C(Controller控制器)是M(Model模型)和V(View视图)的中介者,在前后端交互时起到了中间人的作用