一、定义
封装了一组对象如何交互的对象
补充定义:通过使对象明确地相互引用来促进松散耦合,并允许独立地改变它们的交互
类型:行为型
二、适用场景
1、系统中对象之间存在复杂的引用关系,产生的相互依赖关系结构混乱且难以理解
2、交互的公共行为,如果需要改变行为则可以增加新的中介者类。
(聊天室:其中一个人说一句话,会通知聊天室里的所有人。如果没有中介者,则要对所有人说一遍)
三、中介者模式-优点
1、将一对对转化为一对一,降低程序复杂度
2、类之间解耦(在聊天室说话,假设有10个人,其中一个人要对剩余的9个人说,这样他们是耦合在一起的。如果只对聊天室说,这样就解耦了)
四、中介者模式-缺点
1、中介者过多,导致系统复杂
五、中介者模式-相关设计模式
1、中介者模式和观察者模式
使用观察者模式,实现中介者模式中的角色间通讯。
六、Coding
场景:学习的时候,有一个学习群(如QQ群),大家交流都通过这个群来实现
1、用户类
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 sendMesssage(String message){ StudyGroup.showMessage(this, message); } }
2、学习群类
public class StudyGroup { public static void showMessage(User user, String message){ System.out.println(new Date().toString() + " [" + user.getName() + "] : " + message); } }
3、测试
public class Test { public static void main(String[] args) { User larry = new User("larry"); User nick = new User("nick"); larry.sendMesssage("Hello world"); nick.sendMesssage("Yes"); } }
结果
4、UML图
七、源码中的使用
1、JDK中的Java.util 下的计时器类Timer
里面有很多schedule方法,最后调用sched方法
Timer就相当一个中介者,TimerTask相当于一个用户。