设计模式中介者模式
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)
...
...
以上是关于设计模式中介者模式的主要内容,如果未能解决你的问题,请参考以下文章