設計模式之中介者模式(行為型)--- 18

  • 一润樱、導語
  • 二剩胁、怎么用
    1.樣例背景
    2.UML類圖
    3.代碼示例
  • 三、優(yōu)缺點
  • 四祥国、使用場景
    1.概括描述
    2.現存知名產品中的使用示例
  • 五昵观、相關設計模式
  • 六、參考

一舌稀、導語

中介者模式(Mediator啊犬,又叫做調停者模式),用一個中介對象來封裝一系列的對象交互壁查。中介者使各對象不需要顯式地相互引用觉至,從而使其耦合松散,而且可以獨立的改變他們之間的交互睡腿。

二语御、怎么用

共有2個示例峻贮,代碼詳見訪問鏈接
下面以example2舉例說明

1. 樣例背景

以聯(lián)合國和各國家之間的關系舉例
中介者:聯(lián)合國
同事類:各國家

沒使用中介者模式時的關系圖
使用中介者模式時的關系圖

2. UML類圖

UnitedNations ------------------- 抽象中介者
SecurityCouncil ----------------- 實際中介者
Country ------------------------- 抽象同事類
Iraq ----------------------------- 實際同事類
USA ---------------------------- 實際同事類

example2 使用中介者模式后 UML類圖

3. 代碼示例

/**
 * description:  聯(lián)合國機構  (抽象的中介者)
 */
public abstract class UnitedNations {
    abstract void declare(Country colleague, String message);
}


/**
 * description:  安理會 (具體的中介者類)
 */
public class SecurityCouncil extends UnitedNations {
    @Override
    void declare(Country colleague, String message) {
        colleague.sendMessage(message);
    }
}


/**
 * description:  抽象的國家 (抽象的同事類)
 */
public abstract class Country {
    protected UnitedNations mediator;

    public Country(UnitedNations mediator) {
        this.mediator = mediator;
    }

    abstract void declare(String message);
    abstract void sendMessage(String message);
}


/**
 * description:  伊拉克 (具體的同事類)
 */
public class Iraq extends Country {

    public Iraq(UnitedNations mediator) {
        super(mediator);
    }

    @Override
    void declare(String message) {
        mediator.declare(this,message);
    }

    @Override
    void sendMessage(String message) {
        System.out.println("伊拉克說: " + message);
    }
}


/**
 * description:  美國 (具體的同事類)
 */
public class USA extends Country {
    public USA(UnitedNations mediator) {
        super(mediator);
    }

    @Override
    void declare(String message) {
        mediator.declare(this,message);
    }

    @Override
    void sendMessage(String message) {
        System.out.println("USA說: " + message);
    }
}


public class Test {
    public static void main(String[] args) {
        UnitedNations securityCouncil = new SecurityCouncil();

        Country usa = new USA(securityCouncil);
        Country iraq = new Iraq(securityCouncil);

        usa.declare("不準研制核武器,否則老子收拾你");
        iraq.declare("老子想干啥就干啥应闯,用你管");
    }
}

執(zhí)行結果

USA說: 不準研制核武器纤控,否則老子收拾你
伊拉克說: 老子想干啥就干啥,用你管

三碉纺、優(yōu)缺點

  • 缺點
    1.中介者過多時會增加系統(tǒng)的復雜度

  • 優(yōu)點
    1.將一對多轉化為一對一船万、降低程序復雜度
    2.類之間解耦

四、使用場景

1. 概括描述

  • 系統(tǒng)中對象之間存在復雜的引用關系骨田,產生的相互依賴關系結構混亂且難以理解
  • 交互的公共行為耿导,如果需要改變行為則可以增加新的中介者類

2. 現存知名產品中的使用示例 todo

2.1 java.util.timer (jdk)

五、相關設計模式

1. 中介者模式和觀察者模式

這兩個有時候會結合使用态贤,有時候我們會使用觀察者模式來實現中介者模式中角色的通訊舱呻。

六、參考

  1. https://coding.imooc.com/learn/list/270.html(強烈推薦)
  2. https://en.wikipedia.org/wiki/Design_Patterns
  3. 大話設計模式悠汽,電子版下載鏈接箱吕,https://pan.baidu.com/s/17WOI3Bvp-JUoQXvaomHISg 密碼:vw05
    (作者博客,https://www.cnblogs.com/cj723/archive/2007/12/30/1021314.html)
  4. https://www.cnblogs.com/geek6/p/3951677.html
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末介粘,一起剝皮案震驚了整個濱河市殖氏,隨后出現的幾起案子,更是在濱河造成了極大的恐慌姻采,老刑警劉巖雅采,帶你破解...
    沈念sama閱讀 219,427評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異慨亲,居然都是意外死亡婚瓜,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 93,551評論 3 395
  • 文/潘曉璐 我一進店門刑棵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來巴刻,“玉大人,你說我怎么就攤上這事蛉签『悖” “怎么了?”我有些...
    開封第一講書人閱讀 165,747評論 0 356
  • 文/不壞的土叔 我叫張陵碍舍,是天一觀的道長柠座。 經常有香客問我,道長片橡,這世上最難降的妖魔是什么妈经? 我笑而不...
    開封第一講書人閱讀 58,939評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上吹泡,老公的妹妹穿的比我還像新娘骤星。我一直安慰自己,他們只是感情好爆哑,可當我...
    茶點故事閱讀 67,955評論 6 392
  • 文/花漫 我一把揭開白布洞难。 她就那樣靜靜地躺著,像睡著了一般泪漂。 火紅的嫁衣襯著肌膚如雪廊营。 梳的紋絲不亂的頭發(fā)上歪泳,一...
    開封第一講書人閱讀 51,737評論 1 305
  • 那天萝勤,我揣著相機與錄音,去河邊找鬼呐伞。 笑死敌卓,一個胖子當著我的面吹牛,可吹牛的內容都是我干的伶氢。 我是一名探鬼主播趟径,決...
    沈念sama閱讀 40,448評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼癣防!你這毒婦竟也來了蜗巧?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,352評論 0 276
  • 序言:老撾萬榮一對情侶失蹤蕾盯,失蹤者是張志新(化名)和其女友劉穎幕屹,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體级遭,經...
    沈念sama閱讀 45,834評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡望拖,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,992評論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了挫鸽。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片说敏。...
    茶點故事閱讀 40,133評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖丢郊,靈堂內的尸體忽然破棺而出盔沫,到底是詐尸還是另有隱情,我是刑警寧澤枫匾,帶...
    沈念sama閱讀 35,815評論 5 346
  • 正文 年R本政府宣布架诞,位于F島的核電站,受9級特大地震影響婿牍,放射性物質發(fā)生泄漏侈贷。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,477評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望俏蛮。 院中可真熱鬧撑蚌,春花似錦、人聲如沸搏屑。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽辣恋。三九已至亮垫,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間伟骨,已是汗流浹背饮潦。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留携狭,地道東北人继蜡。 一個月前我還...
    沈念sama閱讀 48,398評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像逛腿,于是被迫代替她去往敵國和親稀并。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,077評論 2 355

推薦閱讀更多精彩內容