中介者模式(Mediator Pattern)是用来降低多个对象和类之间的通信复杂性。这种模式提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护。中介者模式属于行为型模式。
中介者模式的结构
中介者模式又称为调停者模式,从类图中看,共分为3部分:
- 抽象中介者:定义好同事类对象到中介者对象的接口,用于各个同事类之间的通信。一般包括一个或几个抽象的事件方法,并由子类去实现。
- 中介者实现类:从抽象中介者继承而来,实现抽象中介者中定义的事件方法。从一个同事类接收消息,然后通过消息影响其他同时类。
- 同事类:如果一个对象会影响其他的对象,同时也会被其他对象影响,那么这两个对象称为同事类。在类图中,同事类只有一个,这其实是现实的省略,在实际应用中,同事类一般由多个组成,他们之间相互影响,相互依赖。同事类越多,关系越复杂。并且,同事类也可以表现为继承了同一个抽象类的一组实现组成。在中介者模式中,同事类之间必须通过中介者才能进行消息传递。
Coleague
package design.pattern.mediator; public class Coleague { private String info; private Mediator mediator; public Coleague(String info, Mediator mediator) { this.info = info; this.mediator = mediator; mediator.register(info, this); } public void sendMsg(String coleague, String msg) { mediator.transfer(this.info, coleague, msg); } public void receive(String from, String msg) { System.out.println(info + " receive from " + from +": " +msg); } }
Mediator
package design.pattern.mediator; import java.util.HashMap; import java.util.Map; public class Mediator { private Map<String, Coleague> container = new HashMap<>(); public void register(String info, Coleague coleague) { container.put(info, coleague); } public void transfer(String from, String to, String msg) { if (container.containsKey(to)) { container.get(to).receive(from ,msg); } } }
Client
package design.pattern.mediator; public class Client { public static void main(String[] args) { Mediator med = new Mediator(); Coleague A = new Coleague("A", med); Coleague B = new Coleague("B", med); A.sendMsg("B", "hello world"); } }