中介者模式:通过引入中介者将原本对象之间的两两交互转化为每个对象与中介者之间的交互,中介者可以对对象之间的通信进行控制与协调,降低原有系统的耦合度,使系统更灵活,易于扩展。
中介者模式的定义:定义一个对象来封装一系列对象的交互。中介者模式使各对象之间不需要显示地相互引用,从而使其耦合松散,而且用户可以独立地改变它们之间的交互。
中介者模式又称为调停者模式,它是一种对象行为型模式。在中介者模式中,通过引入中介者来简化对象之间的复杂交互。
中介者模式的结构与实现:
1.Mediator(抽象中介者):定义一个接口,该接口用于与各同事对象之间进行通信。
public abstract class Mediator {
protected List<Colleague> colleagues=new ArrayList<>();
public void register(Colleague colleague) {
colleagues.add(colleague);
}
//抽象业务方法
public abstract void operation();
}
2.ConcreteMediator(具体抽象者):是抽象中介者的子类,通过协调各个同事对象来实现协作行为,维持了对各个同事对象的引用。
public class ConcreteMediator extends Mediator {
@Override
public void operation() {
((Colleague)colleagues.get(0)).myBusiness();
}
}
3.Colleague(抽象同事类):定义各个同事类公有的方法,并声明了一些抽象方法供子类实现,同时它维持了一个对抽象中介者类的引用,其子类可以通过该引用与中介者通信。
public abstract class Colleague {
//维持抽象中介者引用
protected Mediator mediator;
public Colleague(Mediator mediator) {
this.mediator=mediator;
}
public abstract void myBusiness();
//与中介者通信
public void communication() {
mediator.operation();
}
}
4.ConcreteColleague(具体同事类):是抽象同事类的子类,每一个同事对象在需要和其他同事对象通信时先与中介者通信,通过中介者间接完成与其他同事类的通信。
public class ConcreteColleague extends Colleague {
public ConcreteColleague(Mediator mediator) {
super(mediator);
}
@Override
public void myBusiness() {
System.out.println("实现具体方法");
}
}
5.测试类:
public class Test {
public static void main(String[] args) {
Mediator mediator=new ConcreteMediator();
Colleague colleague=new ConcreteColleague(mediator);
mediator.register(colleague);
mediator.operation();
}
}