一、基本介绍
中介者模式(Mediator Pattern)属于行为型模式,用一个中介对象来封装一系列的对象交互。中介者使各个对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。
二、代码实现
(1)创建同事抽象类和具体同事类
public abstract class Colleague {
//中介者抽象类
protected Mediator mediator;
//接受消息
public abstract void receive();
//发送消息
public abstract void send();
public void setMediator(Mediator mediator) {
this.mediator = mediator;
}
}
public class ConcreteColleague1 extends Colleague {
@Override
public void receive() {
System.out.println("一号同事接收数据");
}
@Override
public void send() {
System.out.println("一号同事发送数据");
//请中介者转发
this.mediator.relay(this);
}
}
public class ConcreteColleague2 extends Colleague {
@Override
public void receive() {
System.out.println("二号同事接收数据");
}
@Override
public void send() {
System.out.println("二号同事发送数据");
//请中介者转发
this.mediator.relay(this);
}
}
(2)创建中介者接口和中介者实现类
public interface Mediator {
void register(Colleague colleague);
void relay(Colleague colleague);
}
public class ConcreteMediator implements Mediator {
private List<Colleague> colleagues;
public ConcreteMediator() {
colleagues = new ArrayList<>();
}
public void register(Colleague colleague) {
if (!colleagues.contains(colleague)) {
colleague.setMediator(this);
this.colleagues.add(colleague);
}
}
public void relay(Colleague colleague) {
colleagues.forEach(c -> {
if (!c.equals(colleague)) {
c.receive();
}
});
}
}
(3)测试
public class Client {
public static void main(String[] args) {
Mediator mediator = new ConcreteMediator();
Colleague colleague1 = new ConcreteColleague1();
Colleague colleague2 = new ConcreteColleague2();
mediator.register(colleague1);
mediator.register(colleague2);
colleague1.send();
colleague2.send();
}
}
三、UML类图
四、中介者模式小结
- 多个类相互耦合,会形成网状结构, 使用中介者模式将网状结构分离为星型结构,进行解耦。
- 减少类间依赖,降低了耦合,符合迪米特原则。
- 中介者承担了较多的责任,一旦中介者出现了问题,整个系统就会受到影响。
- 如果设计不当,中介者对象本身变得过于复杂,这点在实际使用时,要特别注意。