一句話總結(jié)
星狀結(jié)構(gòu)
內(nèi)容
由對(duì)象直接耦合變成對(duì)象和中介者進(jìn)行關(guān)聯(lián),中介者在于其他對(duì)象進(jìn)行關(guān)聯(lián),將網(wǎng)狀結(jié)構(gòu)變成星狀結(jié)構(gòu)。
場景
朋友圈,信息交易平臺(tái)
類圖
image.png
代碼示例
// 抽象同事類
public abstract class Colleague {
protected Mediator mediator;
public Colleague(Mediator mediator) {
this.mediator = mediator;
}
}
// 具體同事類
public class ConcreteColleagueA extends Colleague {
public ConcreteColleagueA(Mediator mediator) {
super(mediator);
this.mediator.setColleageA(this);
}
// 自有方法:self-Method
public void selfMethodA() {
// 處理自己的邏輯
System.out.println(String.format("%s:self-Method", this.getClass().getSimpleName()));
}
// 依賴方法:dep-Method
public void depMethodA() {
// 處理自己的邏輯
System.out.println(String.format("%s:depMethod: delegate to Mediator", this.getClass().getSimpleName()));
// 無法處理的業(yè)務(wù)邏輯委托給中介者處理
this.mediator.transferA();
}
}
// 具體同事類
public class ConcreteColleagueB extends Colleague {
public ConcreteColleagueB(Mediator mediator) {
super(mediator);
this.mediator.setColleageB(this);
}
// 自有方法:self-Method
public void selfMethodB() {
// 處理自己的邏輯
System.out.println(String.format("%s:self-Method", this.getClass().getSimpleName()));
}
// 依賴方法:dep-Method
public void depMethodB() {
// 處理自己的邏輯
System.out.println(String.format("%s:depMethod: delegate to Mediator", this.getClass().getSimpleName()));
// 無法處理的業(yè)務(wù)邏輯委托給中介者處理
this.mediator.transferB();
}
}
// 抽象中介者
public abstract class Mediator {
protected ConcreteColleagueA colleagueA;
protected ConcreteColleagueB colleagueB;
public void setColleageA(ConcreteColleagueA colleague) {
this.colleagueA = colleague;
}
public void setColleageB(ConcreteColleagueB colleague) {
this.colleagueB = colleague;
}
// 中介者業(yè)務(wù)邏輯
public abstract void transferA();
public abstract void transferB();
}
// 具體中介者
public class ConcreteMediator extends Mediator {
@Override
public void transferA() {
// 協(xié)調(diào)行為:A 轉(zhuǎn)發(fā)到 B
this.colleagueB.selfMethodB();
}
@Override
public void transferB() {
// 協(xié)調(diào)行為:B 轉(zhuǎn)發(fā)到 A
this.colleagueA.selfMethodA();
}
}
public class Test {
public static void main(String[] args) {
Mediator mediator = new ConcreteMediator();
ConcreteColleagueA colleagueA = new ConcreteColleagueA(mediator);
ConcreteColleagueB colleagueB = new ConcreteColleagueB(mediator);
colleagueA.depMethodA();
System.out.println("-------------------------");
colleagueB.depMethodB();
}
}
運(yùn)行結(jié)果
image.png