中介者模式总结如下(可点击放大):
UML结构图如下:
示例:
public class MediatorTest {
public static void main(String[] args) {
Mediator mediator = new ConcreteMediator();
Colleague c1 = new ConcreteColleague1();
Colleague c2 = new ConcreteColleague2();
mediator.register(c1);
mediator.register(c2);
c1.send();
System.out.println("===========");
c2.send();
}
}
//中介者接口
interface Mediator {
void register(Colleague colleague);
void relay(Colleague colleague);
}
//具体中介者
class ConcreteMediator implements Mediator {
private List<Colleague> colleagueList = new ArrayList<>();
@Override
public void register(Colleague colleague) {
if (!colleagueList.contains(colleague)){
colleagueList.add(colleague);
colleague.setMedium(this);
}
}
@Override
public void relay(Colleague colleague) {
for(Colleague c : colleagueList){
if (!c.equals(colleague)) {
c.receive();
}
}
}
}
//抽象同事类
abstract class Colleague{
protected Mediator mediator;
public void setMedium(Mediator mediator) {
this.mediator = mediator;
}
public abstract void receive();
public abstract void send();
}
//具体同事类
class ConcreteColleague1 extends Colleague {
@Override
public void receive() {
System.out.println("具体同事类1收到请求");
}
@Override
public void send() {
System.out.println("具体同事类1发出请求");
mediator.relay(this); //请中介者转发
}
}
//具体同事类
class ConcreteColleague2 extends Colleague {
@Override
public void receive() {
System.out.println("具体同事类2收到请求");
}
@Override
public void send() {
System.out.println("具体同事类2发出请求");
mediator.relay(this); //请中介者转发
}
}