『设计模式』电话接线员与中介者模式
生活随笔
收集整理的這篇文章主要介紹了
『设计模式』电话接线员与中介者模式
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
23種設(shè)計(jì)模式+額外常用設(shè)計(jì)模式匯總 (持續(xù)更新)
引入
- 在面向?qū)ο笙到y(tǒng)的設(shè)計(jì)和開發(fā)過程中,對(duì)象之間的交互和通信是最為常見的情況,因?yàn)閷?duì)象間的交互本身就是一種通信。
- 在系統(tǒng)比較小的時(shí)候,可能對(duì)象間的通信不是很多、對(duì)象也比較少之我們可以直接硬編碼到各個(gè)對(duì)象的方法中。
- 當(dāng)系統(tǒng)規(guī)模變大,對(duì)象的量變引起系統(tǒng)復(fù)雜度的急劇增加,對(duì)象間的通信也變得越來(lái)越復(fù)雜,這時(shí)候我們就要提供一個(gè)專門處理對(duì)象間交互和通信的類,這個(gè)中介者就是Mediator模式。
- Mediator模式將對(duì)象間的交互和通信封裝在一個(gè)類中,各個(gè)對(duì)象間的通信不必顯式去聲明和引用,大大降低了系統(tǒng)的復(fù)雜性能(了解一個(gè)對(duì)象總比深入熟悉n個(gè)對(duì)象要好)。
- Mediator模式還帶來(lái)了系統(tǒng)對(duì)象間的松耦合
定義
用一個(gè)中介對(duì)象來(lái)封裝一系列的對(duì)象交互。中介者使各對(duì)象不需要顯式的相互引用,從而使其耦合松散,而且可以獨(dú)立地改變它們之間的交互。
模式結(jié)構(gòu)
- Mediator模式中,各個(gè)Colleague維護(hù)-一個(gè)Mediator,.當(dāng)要進(jìn)行交互,例如圖中ConcreteCoHeague1和ConcreteColleague2之間的交互就可以通過ConcreteMediator提供的方法來(lái)處理
- ConcreteColleague1和ConcreteColleague2不必維護(hù)對(duì)各自的引用,甚至它們也不知道各個(gè)的存在。Mediator通過這種方式將多對(duì)多的通信簡(jiǎn)化為了一(Mediator)對(duì)多(Colleague) 的通信。
優(yōu)點(diǎn)
- Mediator模式是一種很有用并且很常用的模式,它通過將對(duì)象間的通信封裝到一個(gè)類中,將多對(duì)多的通信轉(zhuǎn)化為一對(duì)多的通信,降低了系統(tǒng)的復(fù)雜性。
- Mediator還獲得系統(tǒng)解耦的特性,通過Mediator,各個(gè)Colleague就不必維護(hù)各自通信的對(duì)象和通信協(xié)議,降低了系統(tǒng)的耦合性,Mediator和各個(gè)Colleague就可以相互獨(dú)立地修改了。
- Mediator模式還有一個(gè)很顯著的特點(diǎn)就是將控制集中,集中的優(yōu)點(diǎn)就是便于管理,也正符合了OO設(shè)計(jì)中的每個(gè)類的職責(zé)要單一和集中的原則。
缺點(diǎn)
- 由于控制的集中化,于是把交互復(fù)雜性變味了中介者的復(fù)雜性,這就使得中介者會(huì)變得比任何一個(gè)- ConcreteColleague都復(fù)雜。
門面模式和中介者模式
- 門面(Facade)模式和中介者(Mediator)模式有著共同的目的。它們都是調(diào)配一組相互耦合的對(duì)象的通信。不過門面模式關(guān)注的是這組復(fù)雜對(duì)象如何與外界通信,而中介者模式是調(diào)配這組復(fù)雜對(duì)象之間的通信。
- 可以組合使用,來(lái)實(shí)現(xiàn)當(dāng)同事對(duì)象發(fā)生改變的時(shí)候,通知中介對(duì)象,讓中介對(duì)象去進(jìn)行與其他相關(guān)對(duì)象的交互
本質(zhì)
- 封裝交互
一個(gè)類知道信息越少越好,隨著ConcreteColleague的數(shù)量的變多,如果不采用中介者模式的話,那么每?jī)蓚€(gè)類之間實(shí)現(xiàn)通信的話是(N-1)N/2的連接,先不說(shuō)原則不原則的事情,當(dāng)?shù)?0個(gè)ConcreteColleague類的時(shí)候就要寫25次通信,那么復(fù)制粘貼也要很久。為了能夠使多個(gè)對(duì)象能夠?qū)崿F(xiàn)通信,所以采用中介者模式。
實(shí)現(xiàn)
package 中介者模式//抽象同事類public abstract class Colleague{protected Mediator mediator;public Colleague(Mediator mediator){this.mediator = mediator;}}package 中介者模式public abstract class Mediator{public abstract void Send(string message, Colleague colleague);}package 中介者模式//具體同事類public class ConcreteColleague1 extends Colleague{public ConcreteColleague1(Mediator mediator) { super( mediator);}public void Send(string message){mediator.Send(message, this);}public void Notify(string message){System.out.println ("同事1得到信息:" + message);}}public class ConcreteColleague2 extends Colleague{public ConcreteColleague2(Mediator mediator) { super( mediator);}public void Send(string message){mediator.Send(message, this);}public void Notify(string message){System.out.println ("同事1得到信息:" + message);}}//具體中介者類public class ConcreteMediator extends Mediator{private ConcreteColleague1 colleague1;private ConcreteColleague2 colleague2;public setColleague1(ConcreteColleague1 Colleague1){this.Colleague1=Colleague1;}public setColleague1(ConcreteColleague2 Colleague2){this.Colleague2=Colleague2;}public override void Send(string message, Colleague colleague){if(colleague==colleague1){colleague2.Notify(message);}else{colleague1.Notify(message);}}}public class Program{public static void Main(string[] args){ConcreteMediator m = new ConcreteMediator();ConcreteColleague1 c1=new ConcreteColleague1(m);ConcreteColleague2 c2 = new ConcreteColleague2(m);m.Colleague1 = c1;m.Colleague2 = c2;c1.Send("XXXXXXX");c2.Send("YYYYYYY");Console.Read();}} }總結(jié)
以上是生活随笔為你收集整理的『设计模式』电话接线员与中介者模式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: iQOO Neo7 SE 手机 16GB
- 下一篇: 『设计模式』外观模式--这篇博客也太明了