中介者模式(Mediator Pattern),又稱(chēng)調(diào)停者模式,是行為類(lèi)模式的一種。
用一個(gè)中介對(duì)象封裝一系列的對(duì)象交互,中介者使各對(duì)象不需要顯示地相互作用,從而使其耦合松散,而且可以獨(dú)立地改變他們的交互。
由于中介者對(duì)象(中介者模式的核心)封裝了各對(duì)象間的相互關(guān)系,導(dǎo)致其變得非常復(fù)雜,系統(tǒng)維護(hù)困難。
中介者模式通過(guò)中介者類(lèi)簡(jiǎn)化了系統(tǒng)的結(jié)構(gòu),將系統(tǒng)中有關(guān)對(duì)象引用的其他對(duì)象數(shù)目減到最少,將網(wǎng)狀結(jié)構(gòu)變?yōu)樾切徒Y(jié)構(gòu),中介者對(duì)象在這里起到中轉(zhuǎn)和協(xié)調(diào)作用。
中介者模式和外觀模式的區(qū)別?
注:當(dāng)系統(tǒng)中連續(xù)出現(xiàn)‘多對(duì)多’交互復(fù)雜的對(duì)象群,不要急于使用中介者模式,首先反思系統(tǒng)的設(shè)計(jì)是否合理。即使使用中介者模式時(shí)也要注意控制中介者類(lèi)的大小。
//抽象中介者類(lèi)public abstract class Mediator { public abstract void send(String message, Colleague colleague);}//中介者實(shí)現(xiàn)類(lèi)public class ConcreteMediator extends Mediator { // 需要了解所有的具體同事對(duì)象 private ConcreteColleague1 c1; private ConcreteColleague2 c2; public ConcreteColleague1 getC1() { return c1; } public void setC1(ConcreteColleague1 c1) { this.c1 = c1; } public ConcreteColleague2 getC2() { return c2; } public void setC2(ConcreteColleague2 c2) { this.c2 = c2; } @Override public void send(String message, Colleague colleague) { // 重寫(xiě)發(fā)送信息的方法,根據(jù)對(duì)象做出選擇判斷,通知對(duì)象 if (colleague == c1) { c2.notifyMsg(message); } else { c1.notifyMsg(message); } }}//抽象同事類(lèi)public abstract class Colleague { protected Mediator mediator; public Colleague(Mediator mediator) { this.mediator = mediator; } public abstract void sendMsg(String message); public abstract void notifyMsg(String message);}//同事類(lèi)實(shí)現(xiàn)類(lèi)public class ConcreteColleague1 extends Colleague { public ConcreteColleague1(Mediator mediator) { super(mediator); } @Override public void sendMsg(String message) { mediator.send(message, this); } @Override public void notifyMsg(String message) { System.out.println("同事1得到消息:" message); }}public class ConcreteColleague2 extends Colleague { public ConcreteColleague2(Mediator mediator) { super(mediator); } @Override public void sendMsg(String message) { mediator.send(message, this); } @Override public void notifyMsg(String message) { System.out.println("同事2得到消息:" message); }}-------------------------------------------------------------------------------------
來(lái)源:http://www.icode9.com/content-4-215351.html
聯(lián)系客服