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

目录

说明

实现方式

应用场景

其他链接


说明

  • 行为型模式之一,其他还有命令模式、模板方法模式、访问者模式、观察者模式、迭代器模式、备忘录模式、解释器模式(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视图)的中介者,在前后端交互时起到了中间人的作用


其他链接

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

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

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

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

winrh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值