生活随笔
收集整理的這篇文章主要介紹了
设计模式C++实现(13)——中介者模式
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
中介者模式:用一個中介對象來封裝一系列的對象交互。中介者使各對象不需要顯式地相互引用,從而使其耦合松散,而且可以獨立地改變它們之間的交互。中介者模式的例子很多,大到聯合國安理會,小到房屋中介,都扮演了中間者的角色,協調各方利益。
? ? ? ?本文就以租房為例子,如果沒有房屋中介,那么房客要自己找房東,而房東也要自己找房客,非常不方便。有了房屋中介機構就方便了,房東可以把要出租的房屋信息放到中介機構,而房客可以去中介機構咨詢。在軟件中,就是多個對象之間需要通信,如果沒有中介,對象就需要知道其他對象,最壞情況下,可能需要知道所有其他對象,而有了中介對象就方便多了,對象只需與中介對象通信,而不用知道其他的對象。這就是中介者模式,下面以租房為例,給出中介者模式的UML圖。
? ? ? ? 實現不難,下面給出C++的實現:
[cpp]?view plaincopy print?
class?Mediator;?? ?? class?Person?? {?? protected:?? ????Mediator?*m_mediator;??? public:?? ????virtual?void?SetMediator(Mediator?*mediator){}??? ????virtual?void?SendMessage(string?message)?{}?????? ????virtual?void?GetMessage(string?message)?{}??????? };?? ?? class?Mediator?? {?? public:?? ????virtual?void?Send(string?message,?Person?*person)?{}?? ????virtual?void?SetA(Person?*A)?{}???? ????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)??? ????????????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;?? }??
? ? ?
總結
以上是生活随笔為你收集整理的设计模式C++实现(13)——中介者模式的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。