【Java设计模式】简单学中介者模式——唐长老,取经之路已帮你打点好了

目录

说明

实现方式

应用场景

其他链接


说明

  • 行为型模式之一,其他还有命令模式、模板方法模式、访问者模式、观察者模式、迭代器模式、备忘录模式、解释器模式(Interpreter模式)、状态模式、策略模式、职责链模式(责任链模式)
  • 中介者模式(Mediator Pattern,又叫调停者模式):将对象间网状的联系转化为以中介为中心的星形结构

  • 优缺点都是集中控制

  • 中介者承担了较多的责任,一旦中介者出现了问题,整个系统就会受到影响

实现方式

唐僧师徒四人西天取经,路途上难免需要和众多仙家沟通来往。如果一对一打电话,就得记住对方的电话号码,这属实麻烦。这时候大家都一致认为用微信来沟通,更加方便快捷。微信在其中就起到中介者得作用。

【Java设计模式】简单学中介者模式——唐长老,取经之路已帮你打点好了_第1张图片

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);

    }
}
/**
 * 通讯工具(抽象的中介者类)
 * 

* @author ZRH * @date 2020/7/29 * @version 1.0.0 */ abstract class CommunicationTool { /** * 抽象的发送的消息方法 *

* * @param message * @param weChatUser * @author : ZRH * @version : 1.0.0 * @date : 2020-07-24 */ public abstract void send(String message, WeChatUser weChatUser); } /** * 微信用户 *

* @author ZRH * @date 2020/7/29 * @version 1.0.0 */ abstract class WeChatUser { private CommunicationTool communicationTool; public WeChatUser(CommunicationTool communicationTool) { this.communicationTool = communicationTool; } /** * 通过中介者发送消息 *

* * @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); } /** * 收到中介者的通知 *

* * @param message * @author : ZRH * @version : 1.0.0 * @date : 2020-07-24 */ public abstract void getNotifyMessage(String message); } /** * 具体用户,唐僧 *

* * @author ZRH * @version 1.0.0 * @date 2020/7/24 */ class TangMonk extends WeChatUser { public TangMonk(CommunicationTool communicationTool) { super(communicationTool); } /** * 收到微信发来的消息 *

* * @param message * @author ZRH * @date 2020-07-24 * @version 1.0.0 */ @Override public void getNotifyMessage(String message) { System.out.println("唐僧 收到了消息: " + message); } } /** * 具体用户,玉皇大帝 *

* * @author ZRH * @version 1.0.0 * @date 2020/7/24 */ class JadeEmperor extends WeChatUser { public JadeEmperor(CommunicationTool communicationTool) { super(communicationTool); } /** * 收到微信发来的消息 *

* * @param message * @author ZRH * @date 2020-07-24 * @version 1.0.0 */ @Override public void getNotifyMessage(String message) { System.out.println("玉皇大帝 收到了消息: " + message); } } /** * 微信 *

* * @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; } /** * 抽象的发送的消息方法 *

* * @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("查无此人"); } } }

【Java设计模式】简单学中介者模式——唐长老,取经之路已帮你打点好了_第2张图片 


应用场景

  • MVC模式,C(Controller控制器)是M(Model模型)和V(View视图)的中介者,在前后端交互时起到了中间人的作用


其他链接

【Java设计模式】简单学工厂模式

【Java设计模式】简单学抽象工厂模式

【Java设计模式】简单学建造者模式

【Java设计模式】简单学单例模式

【Java设计模式】简单学原型模式

【Java设计模式】其他模式~

你可能感兴趣的:(Java设计模式)