设计模式中介者模式

Posted 木兮同学

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式中介者模式相关的知识,希望对你有一定的参考价值。

文章目录


一、中介者模式

  • 定义:定义一个封装一组如何交互的对象,通过使对象明确的相互引用来促进松散耦合,并允许独立地改变它们的交互
  • 类型:行为型
  • 适用场景
    • 系统中对象之间存在复杂的引用关系,产生的相互依赖关系结构混乱且难以理解
    • 交互的公共行为,如果需要改变行为则可以增加新的中介者类
  • 优点
    • 将一对多转化为一对一、降低程序复杂度
    • 类之间解耦
  • 缺点
    • 中介者过多,导致系统复杂
  • 相关设计模式
    • 中介者模式和观察者模式:有时候会结合使用,用观察者模式来实现中介者模式角色间的通讯

二、Coding

public class User 
    private String name;

    public String getName() 
        return name;
    

    public void setName(String name) 
        this.name = name;
    

    public User(String name) 
        this.name = name;
    

    public void sendMessage(String message) 
        StudyGroup.showMessage(this, message);
    

public class StudyGroup 

    public static void showMessage(User user, String message) 
        System.out.println(new Date().toString() + " [" + user.getName() + "] : " + message);
    

  • 测试类:
public class Test 
    public static void main(String[] args) 
        User zhangsan = new User("张三");
        User lisi = new User("李四");

        zhangsan.sendMessage(" Hey! 李四! Let's learn Design Pattern");
        lisi.sendMessage(" OK! 张三");
    

  • 打印结果:
Sun Mar 21 00:01:17 CST 2021 [张三] :  Hey! 李四! Let's learn Design Pattern
Sun Mar 21 00:01:17 CST 2021 [李四] :  OK! 张三
  • UML类图:
  • 说明:这里例子很简单,首先StudyGroup就是个中介者,里面就一个方法表示“谁说了什么话”,然后User里面有一个sendMessage方法,也就是说对于某个用户来说,该用户只要跟中介者打交道就可以,他只发送消息,由中介者展示消息。

三、源码中的应用

  • java.util.Timer:会发现很多方法最后调用的都是sched()方法,可以看到sched()方法,Timer就相当于是个中介者,它去协调具体的TimerTask任务类,所有的任务都会到sched()方法,进行整体的协调
public class Timer 
	...
	public void schedule(TimerTask task, Date time) 
        sched(task, time.getTime(), 0);
    
    public void schedule(TimerTask task, Date firstTime, long period) 
        if (period <= 0)
            throw new IllegalArgumentException("Non-positive period.");
        sched(task, firstTime.getTime(), -period);
    
    private void sched(TimerTask task, long time, long period) 
        ...
    
    ...

以上是关于设计模式中介者模式的主要内容,如果未能解决你的问题,请参考以下文章

设计模式总结

设计模式—— 十四 :中介者模式

中介者模式:联合国实例

一起学设计模式中介者模式+观察者模式+备忘录模式实战:提交个订单我到底经历了什么鬼?

23种设计模式(十四)——中介者模式接口隔离

重学设计模式(三设计模式-中介者模式)