優勢:優化
① 將系統的網狀結構,變成以中介者爲中心的星形結構,各對象之間不直接發生聯繫,耦合鬆散spa
② 用一箇中介對象來封裝一系列的對象交互。中介者模式使各對象不須要顯式地相互引用,從而使其耦合鬆散,並且能夠獨立地改變它們之間的交互。code
③ 提升系統的靈活性,使得各個對象獨立且易於複用。對象
缺點:blog
① 中介者類承擔了較多的責任,因此一旦這個中介者類出現了問題,整個系統將會受到重大的影響。class
② 新增長一個同事類時,必須去修改具體中介者類,此時能夠使用觀察者模式和狀態模式來優化。引用
適用範圍:方法
適用於一組對象之間定義良好且複雜的通訊場合,以及分佈在多個類的行爲,但又不想生成太多的子類的場合im
客戶端: 通信
//中介者
ConcreteMediator m = new ConcreteMediator();
//讓兩個同事認識中介者
ConcreteColleague1 c1 = new ConcreteColleague1(m);
ConcreteColleague2 c2 = new ConcreteColleague2(m);
//讓中介者認識兩個同事
m.setColleague1(c1);
m.setColleague2(c2);
//兩同事交流
c1.send("吃飯了嗎?");
c2.send("沒有呢");
//打印
同事2獲得消息:吃飯了嗎?
同事1獲得消息:沒有呢
/** * Colleague 抽象同事類 -- 發送方法(調用Mediator的分發消息方法),應答方法 * ConcreteColleague1 ConcreteColleague2 同事類實例化 * * Mediator 抽象中介類 -- 判斷分發消息並回復的方法(最後內部調用Colleague的應答方法) * ConcreteMediator 中介類實例化 */