『设计模式』电话接线员与中介者模式
生活随笔
收集整理的這篇文章主要介紹了
『设计模式』电话接线员与中介者模式
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
23種設計模式+額外常用設計模式匯總 (持續更新)
引入
- 在面向對象系統的設計和開發過程中,對象之間的交互和通信是最為常見的情況,因為對象間的交互本身就是一種通信。
- 在系統比較小的時候,可能對象間的通信不是很多、對象也比較少之我們可以直接硬編碼到各個對象的方法中。
- 當系統規模變大,對象的量變引起系統復雜度的急劇增加,對象間的通信也變得越來越復雜,這時候我們就要提供一個專門處理對象間交互和通信的類,這個中介者就是Mediator模式。
- Mediator模式將對象間的交互和通信封裝在一個類中,各個對象間的通信不必顯式去聲明和引用,大大降低了系統的復雜性能(了解一個對象總比深入熟悉n個對象要好)。
- Mediator模式還帶來了系統對象間的松耦合
定義
用一個中介對象來封裝一系列的對象交互。中介者使各對象不需要顯式的相互引用,從而使其耦合松散,而且可以獨立地改變它們之間的交互。
模式結構
- Mediator模式中,各個Colleague維護-一個Mediator,.當要進行交互,例如圖中ConcreteCoHeague1和ConcreteColleague2之間的交互就可以通過ConcreteMediator提供的方法來處理
- ConcreteColleague1和ConcreteColleague2不必維護對各自的引用,甚至它們也不知道各個的存在。Mediator通過這種方式將多對多的通信簡化為了一(Mediator)對多(Colleague) 的通信。
優點
- Mediator模式是一種很有用并且很常用的模式,它通過將對象間的通信封裝到一個類中,將多對多的通信轉化為一對多的通信,降低了系統的復雜性。
- Mediator還獲得系統解耦的特性,通過Mediator,各個Colleague就不必維護各自通信的對象和通信協議,降低了系統的耦合性,Mediator和各個Colleague就可以相互獨立地修改了。
- Mediator模式還有一個很顯著的特點就是將控制集中,集中的優點就是便于管理,也正符合了OO設計中的每個類的職責要單一和集中的原則。
缺點
- 由于控制的集中化,于是把交互復雜性變味了中介者的復雜性,這就使得中介者會變得比任何一個- ConcreteColleague都復雜。
門面模式和中介者模式
- 門面(Facade)模式和中介者(Mediator)模式有著共同的目的。它們都是調配一組相互耦合的對象的通信。不過門面模式關注的是這組復雜對象如何與外界通信,而中介者模式是調配這組復雜對象之間的通信。
- 可以組合使用,來實現當同事對象發生改變的時候,通知中介對象,讓中介對象去進行與其他相關對象的交互
本質
- 封裝交互
一個類知道信息越少越好,隨著ConcreteColleague的數量的變多,如果不采用中介者模式的話,那么每兩個類之間實現通信的話是(N-1)N/2的連接,先不說原則不原則的事情,當到10個ConcreteColleague類的時候就要寫25次通信,那么復制粘貼也要很久。為了能夠使多個對象能夠實現通信,所以采用中介者模式。
實現
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();}} }總結
以上是生活随笔為你收集整理的『设计模式』电话接线员与中介者模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: iQOO Neo7 SE 手机 16GB
- 下一篇: 『设计模式』外观模式--这篇博客也太明了