Mediator中介者設計模式是經過一箇中介對象封裝一系列關於對象交互行爲. java
Mediator中介者設計模式中的角色以下: 設計模式
(1).中介者(Mediator):抽象定義了「同事」(colleagues,稍後有定義)們通訊的接口。 this
(2).具體中介者(Concrete Mediator):實現了「同事」間的通訊接口。 設計
(3).同事(Colleague):參與通訊的實體抽象。 code
(4).具體同事(Concrete Colleague):實現的參與通訊的實體。 對象
Mediator中介者設計模式結構以下: 接口
以私信聊天爲例來簡單演示Mediator中介者設計模式,例子代碼以下: string
//中介者 interface Mediator{ public void send(String msg, Person person); } //具體中介者 class ConcreteMediator implements Mediator{ //中介者所聯繫的交互對象 private PersonA personA; private PersonA personB; public void setPersonA(PersonA personA){ this.personA = personA; } Public void setPersonB(PersonB personB){ this.personB = personB; } public void send(String msg, Person person){ if(person.equals(personA)){ personA.greeting(msg); }else{ personB.greeting(msg); } } } //抽象同事 abstract class Person{ //同事和中介者打交道 protected Mediator mediator; public Person(Mediator mediator){ this.mediator = mediator; } } //具體同事 class PersonA extends Person{ public PersonA(Mediator mediator){ super(mediator); } public void send(String msg){ mediator.send(msg, this); } public void greeting(string msg){ System.out.println(「PersonA: 」 + msg); } } class PersonB extends Person{ public PersonB(Mediator mediator){ super(mediator); } public void send(String msg){ mediator.send(msg, this); } public void greeting(string msg){ System.out.println(「PersonB: 」 + msg); } } public class MediatorDemo{ public static void main(String[] args){ //建立中介 Mediator mediator = new ConcreteMediator(); //建立同事,併爲同事設置中介 Person personA = new PersonA(mediator); Person personB = new PersonB(mediator); //向中介設置同事 mediator.setPersonA(personA); mediator.setPersonB(personB); //開始聊天 personA.send(「Hi, B!」); personB.send(「Hello, A!」); } }
在對象之間的交互操做很是多的狀況下;每一個對象的行爲操做均可能依賴不少其餘對象,修改一個對象的行爲的同時可能會影響到不少其餘對象的行爲,若是使用Mediator模式,能夠使各個對象間的耦合鬆散,只需關心和 Mediator的關係,使多對多的關係變成了一對多的關係,在下降系統複雜性的同時提升可修改擴展性. class