日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

设计模式C++实现(13)——中介者模式

發(fā)布時間:2025/3/20 c/c++ 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 设计模式C++实现(13)——中介者模式 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

中介者模式:用一個中介對象來封裝一系列的對象交互。中介者使各對象不需要顯式地相互引用,從而使其耦合松散,而且可以獨立地改變它們之間的交互。中介者模式的例子很多,大到聯(lián)合國安理會,小到房屋中介,都扮演了中間者的角色,協(xié)調(diào)各方利益。

? ? ? ?本文就以租房為例子,如果沒有房屋中介,那么房客要自己找房東,而房東也要自己找房客,非常不方便。有了房屋中介機構(gòu)就方便了,房東可以把要出租的房屋信息放到中介機構(gòu),而房客可以去中介機構(gòu)咨詢。在軟件中,就是多個對象之間需要通信,如果沒有中介,對象就需要知道其他對象,最壞情況下,可能需要知道所有其他對象,而有了中介對象就方便多了,對象只需與中介對象通信,而不用知道其他的對象。這就是中介者模式,下面以租房為例,給出中介者模式的UML圖。


? ? ? ? 實現(xiàn)不難,下面給出C++的實現(xiàn):

[cpp]?view plaincopy print?
  • class?Mediator;??
  • //抽象人??
  • class?Person??
  • {??
  • protected:??
  • ????Mediator?*m_mediator;?//中介??
  • public:??
  • ????virtual?void?SetMediator(Mediator?*mediator){}?//設(shè)置中介??
  • ????virtual?void?SendMessage(string?message)?{}????//向中介發(fā)送信息??
  • ????virtual?void?GetMessage(string?message)?{}?????//從中介獲取信息??
  • };??
  • //抽象中介機構(gòu)??
  • class?Mediator??
  • {??
  • public:??
  • ????virtual?void?Send(string?message,?Person?*person)?{}??
  • ????virtual?void?SetA(Person?*A)?{}??//設(shè)置其中一方??
  • ????virtual?void?SetB(Person?*B)?{}??
  • };??
  • //租房者??
  • class?Renter:?public?Person??
  • {??
  • public:??
  • ????void?SetMediator(Mediator?*mediator)?{?m_mediator?=?mediator;?}??
  • ????void?SendMessage(string?message)?{?m_mediator->Send(message,?this);?}??
  • ????void?GetMessage(string?message)?{?cout<<"租房者收到信息"<<message;?}??
  • };??
  • //房東??
  • class?Landlord:?public?Person??
  • {??
  • public:??
  • ????void?SetMediator(Mediator?*mediator)?{?m_mediator?=?mediator;?}??
  • ????void?SendMessage(string?message)?{?m_mediator->Send(message,?this);?}??
  • ????void?GetMessage(string?message)?{?cout<<"房東收到信息:"<<message;?}??
  • };??
  • //房屋中介??
  • class?HouseMediator?:?public?Mediator??
  • {??
  • private:??
  • ????Person?*m_A;?//租房者??
  • ????Person?*m_B;?//房東??
  • public:??
  • ????HouseMediator():?m_A(0),?m_B(0)?{}??
  • ????void?SetA(Person?*A)?{?m_A?=?A;?}??
  • ????void?SetB(Person?*B)?{?m_B?=?B;?}??
  • ????void?Send(string?message,?Person?*person)???
  • ????{??
  • ????????if(person?==?m_A)?//租房者給房東發(fā)信息??
  • ????????????m_B->GetMessage(message);?//房東收到信息??
  • ????????else??
  • ????????????m_A->GetMessage(message);??
  • ????}??
  • };??
  • ? ? ? ? 客戶使用方式如下:
    [cpp]?view plaincopy print?
  • //測試案例??
  • int?main()??
  • {?????
  • ????Mediator?*mediator?=?new?HouseMediator();??
  • ????Person?*person1?=?new?Renter();????//租房者??
  • ????Person?*person2?=?new?Landlord();??//房東??
  • ????mediator->SetA(person1);??
  • ????mediator->SetB(person2);??
  • ????person1->SetMediator(mediator);??
  • ????person2->SetMediator(mediator);??
  • ????person1->SendMessage("我想在南京路附近租套房子,價格800元一個月\n");??
  • ????person2->SendMessage("出租房子:南京路100號,70平米,1000元一個月\n");??
  • ????delete?person1;?delete?person2;?delete?mediator;??
  • ????return?0;??
  • }??
  • ? ? ?

    總結(jié)

    以上是生活随笔為你收集整理的设计模式C++实现(13)——中介者模式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。