中介模式:
用一个中介对象(中介者)来封装一系列的对象交互,中介者使各对象不须要显式地相互引用,从而使其耦合松散,
并且能够独立地改变它们之间的交互。中介者模式又称为调停者模式,它是一种对象行为型模式。java
结构图:
markdown
示例类图:
ide
示例代码:测试
public interface Mediator {
public abstract void work(Colleague colleague);
}
public class ConcreteMediator implements Mediator {
private CDDriver cdDriver;
private SoundCard soundCard;
@Override
public void work(Colleague colleague) {
if (cdDriver == colleague) {
cdDriver.readSound();
} else if (soundCard == colleague) {
soundCard.playSound();
}
}
public void setCdDriver(CDDriver cdDriver) {
this.cdDriver = cdDriver;
}
public void setSoundCard(SoundCard soundCard) {
this.soundCard = soundCard;
}
}
// Colleague 同事类
public abstract class Colleague {
protected Mediator mediator;
public Colleague(Mediator mediator) {
this.mediator = mediator;
}
public abstract void work();
}
// ConcreteMediator
public class CDDriver extends Colleague {
public CDDriver(Mediator mediator) {
super(mediator);
}
@Override
public void work() {
mediator.work(this);
}
public void readSound() {
System.out.println("CDDriver readSound.");
}
}
public class SoundCard extends Colleague {
public SoundCard(Mediator mediator) {
super(mediator);
}
@Override
public void work() {
mediator.work(this);
}
public void playSound() {
System.out.println("SoundCard playSound.");
}
}
// 测试
public class MediatorTest {
public static void main(String[] args) {
ConcreteMediator mediator = new ConcreteMediator();
CDDriver cdDriver = new CDDriver(mediator);
SoundCard soundCard = new SoundCard(mediator);
mediator.setCdDriver(cdDriver);
mediator.setSoundCard(soundCard);
cdDriver.work();
soundCard.work();
}
}
角色:this
Mediator :中介者接口/抽象类。
在里面定义了各个同事之间相互交互所须要的方法,
能够是公共的方法,如Change方法,也能够是小范围的交互方法。spa
ConcreteMediator :具体的中介者实现对象。
它须要了解并为维护每一个同事对象,并负责具体的协调各个同事对象的交互关系。code
Colleague :同事类的定义,一般实现成为抽象类。
主要负责约束同事对象的类型,并实现一些具体同事类之间的公共功能,好比,每一个具体同事类都应该知道中介者对象,
也就是每一个同事对象都会持有中介者对象的引用,这个功能可定义在这个类中。对象
ConcreteColleague :具体的同事类,实现本身的业务。
须要与其余同事对象交互时,就通知中介对象,中介对象会负责后续的交互。接口