中介者模式:通過引入中介者將原本對象之間的兩兩交互轉(zhuǎn)化為每個對象與中介者之間的交互芹缔,中介者可以對對象之間的通信進行控制與協(xié)調(diào)驾孔,降低原有系統(tǒng)的耦合度,使系統(tǒng)更靈活炸庞,易于擴展钱床。
中介者模式的定義:定義一個對象來封裝一系列對象的交互。中介者模式使各對象之間不需要顯示地相互引用燕雁,從而使其耦合松散诞丽,而且用戶可以獨立地改變它們之間的交互。
中介者模式又稱為調(diào)停者模式拐格,它是一種對象行為型模式僧免。在中介者模式中,通過引入中介者來簡化對象之間的復(fù)雜交互捏浊。
中介者模式的結(jié)構(gòu)與實現(xiàn):
1.Mediator(抽象中介者):定義一個接口懂衩,該接口用于與各同事對象之間進行通信。
public abstract class Mediator {
protected List<Colleague> colleagues=new ArrayList<>();
public void register(Colleague colleague) {
colleagues.add(colleague);
}
//抽象業(yè)務(wù)方法
public abstract void operation();
}
2.ConcreteMediator(具體抽象者):是抽象中介者的子類,通過協(xié)調(diào)各個同事對象來實現(xiàn)協(xié)作行為浊洞,維持了對各個同事對象的引用牵敷。
public class ConcreteMediator extends Mediator {
@Override
public void operation() {
((Colleague)colleagues.get(0)).myBusiness();
}
}
3.Colleague(抽象同事類):定義各個同事類公有的方法,并聲明了一些抽象方法供子類實現(xiàn)法希,同時它維持了一個對抽象中介者類的引用枷餐,其子類可以通過該引用與中介者通信。
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("實現(xiàn)具體方法");
}
}
5.測試類:
public class Test {
public static void main(String[] args) {
Mediator mediator=new ConcreteMediator();
Colleague colleague=new ConcreteColleague(mediator);
mediator.register(colleague);
mediator.operation();
}
}