中介者模式C++

中介者模式,就是用一個(gè)中介對(duì)象來封裝一系列的對(duì)象交互。中介者使各對(duì)象不需要顯示地相互引用讯柔,從而使其耦合松散抡蛙,而且可以獨(dú)立地改變它們之間的交互。

中介者模式結(jié)構(gòu)圖

image

中介者模式基本代碼

#include <iostream>
#include <string>
using namespace std;

class Colleague;

class Mediator {
public:
    virtual void Send(string message, Colleague* colleague) = 0;
    virtual ~Mediator() {}
};

class Colleague {
protected:
    Mediator* mediator;
public:
    Colleague(Mediator* m) { mediator = m; }
};

class ConcreteColleague1 : public Colleague {
public:
    ConcreteColleague1(Mediator* m) : Colleague(m) {}
    void Send(string message) {
        mediator->Send(message, this);
    }
    void Notify(string message) {
        cout << "ConcreteColleague1 received: " << message << endl;
    }
};

class ConcreteColleague2 : public Colleague {
public:
    ConcreteColleague2(Mediator* m) : Colleague(m) {}
    void Send(string message) {
        mediator->Send(message, this);
    }
    void Notify(string message) {
        cout << "ConcreteColleague2 received: " << message << endl;
    }
};

class ConcreteMediator : public Mediator {
private:
    ConcreteColleague1* c1;
    ConcreteColleague2* c2;
public:
    void set(ConcreteColleague1* c) { c1 = c; }
    void set(ConcreteColleague2* c) { c2 = c; }
    void Send(string message, Colleague* colleague) {
        if (colleague == c1) c2->Notify(message);
        else c1->Notify(message);
    }
};

int main() {
    ConcreteMediator* m = new ConcreteMediator();
    ConcreteColleague1* c1 = new ConcreteColleague1(m);
    ConcreteColleague2* c2 = new ConcreteColleague2(m);

    m->set(c1);
    m->set(c2);

    c1->Send("Hello");   // ConcreteColleague2 received: Hello
    c2->Send("World");  // ConcreteColleague1 received: World

    delete m;
    delete c1;
    delete c2;
    return 0;
}

應(yīng)用場景

中介者模式一般用于一組對(duì)象以定義良好但是復(fù)雜的方式進(jìn)行通信的場合魂迄,以及想定制一個(gè)分布在多個(gè)類中的行為粗截,而又不想生成太多的子類的場合。

優(yōu)點(diǎn):

  • Mediator減少了各個(gè)Colleague的耦合捣炬,使得可以獨(dú)立地完成改變和復(fù)用各個(gè)Colleague類和Mediator慈格;
  • 由于把對(duì)象如何協(xié)作進(jìn)行了抽象,將中介作為一個(gè)獨(dú)立的概念并將其封裝在一個(gè)對(duì)象中遥金,這樣關(guān)注對(duì)象就從對(duì)象各自本身的行為轉(zhuǎn)移到它們之間的交互上來浴捆,也就是站在一個(gè)更宏觀的角度去看待系統(tǒng)。

缺點(diǎn):

  • 由于ConcreteMediator控制了集中化稿械,于是就把交互復(fù)雜性變?yōu)榱酥薪檎叩膹?fù)雜性选泻,這就使得中介者變得比任何一個(gè)ConcreteColleague更復(fù)雜。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末美莫,一起剝皮案震驚了整個(gè)濱河市页眯,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌厢呵,老刑警劉巖窝撵,帶你破解...
    沈念sama閱讀 217,826評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異襟铭,居然都是意外死亡碌奉,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門寒砖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來赐劣,“玉大人,你說我怎么就攤上這事哩都】妫” “怎么了?”我有些...
    開封第一講書人閱讀 164,234評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵漠嵌,是天一觀的道長咐汞。 經(jīng)常有香客問我,道長儒鹿,這世上最難降的妖魔是什么化撕? 我笑而不...
    開封第一講書人閱讀 58,562評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮挺身,結(jié)果婚禮上侯谁,老公的妹妹穿的比我還像新娘。我一直安慰自己章钾,他們只是感情好墙贱,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,611評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著贱傀,像睡著了一般惨撇。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上府寒,一...
    開封第一講書人閱讀 51,482評(píng)論 1 302
  • 那天魁衙,我揣著相機(jī)與錄音,去河邊找鬼株搔。 笑死剖淀,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的纤房。 我是一名探鬼主播纵隔,決...
    沈念sama閱讀 40,271評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼炮姨!你這毒婦竟也來了捌刮?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,166評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤舒岸,失蹤者是張志新(化名)和其女友劉穎绅作,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蛾派,經(jīng)...
    沈念sama閱讀 45,608評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡俄认,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,814評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了洪乍。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片梭依。...
    茶點(diǎn)故事閱讀 39,926評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖典尾,靈堂內(nèi)的尸體忽然破棺而出役拴,到底是詐尸還是另有隱情,我是刑警寧澤钾埂,帶...
    沈念sama閱讀 35,644評(píng)論 5 346
  • 正文 年R本政府宣布河闰,位于F島的核電站,受9級(jí)特大地震影響褥紫,放射性物質(zhì)發(fā)生泄漏姜性。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,249評(píng)論 3 329
  • 文/蒙蒙 一髓考、第九天 我趴在偏房一處隱蔽的房頂上張望部念。 院中可真熱鬧,春花似錦、人聲如沸儡炼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽乌询。三九已至榜贴,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間妹田,已是汗流浹背唬党。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留鬼佣,地道東北人驶拱。 一個(gè)月前我還...
    沈念sama閱讀 48,063評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像晶衷,于是被迫代替她去往敵國和親蓝纲。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,871評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容