1. 程式人生 > >中介者模式

中介者模式

對象 pre using pri tor prot oid src 中介者模式

中介者(Mediator)模式

意圖:用一個中介對象來封裝一系列的對象交互,中介者使各對象不需要顯式地相互引用,從而使其耦合松散,而且可以獨立地改變它們之間的交互。

主要解決:對象與對象之間存在大量的關聯關系,這樣勢必會導致系統的結構變得很復雜,同時若一個對象發生改變,我們也需要跟蹤與之相關聯的對象,同時做出相應的處理。

應用實例: 1、中國加入 WTO 之前是各個國家相互貿易,結構復雜,現在是各個國家通過 WTO 來互相貿易。 2、機場調度系統。 3、MVC 框架,其中C(控制器)就是 M(模型)和 V(視圖)的中介者。

代碼:

#include <iostream>
#include 
<string> using namespace std; class Mediator; class Person { public: virtual ~Person() {} public: virtual void setMediator(Mediator *m) {} // 設置中介 virtual void sendMessage(string message){} // 發送消息 virtual void getMessage(string message){} // 獲取消息 protected: Mediator *_mediator; };
class Mediator { public: virtual ~Mediator() {} public: virtual void setLandlord(Person *p) {} // 設置房東 virtual void setRenter(Person *p) {} // 設置租客 virtual void sendMessage(string message, Person *p) {} // 轉發消息 }; class Landlord : public Person { public: void setMediator(Mediator *m) { _mediator
= m; } void sendMessage(string message) { _mediator->sendMessage(message, this); } void getMessage(string message) { cout << "房東收到租客發來的消息:" << message << endl; } }; class Renter : public Person { public: void setMediator(Mediator *m) { _mediator = m; } void sendMessage(string message) { _mediator->sendMessage(message, this); } void getMessage(string message) { cout << "租客收到房東發來的消息: " << message << endl; } }; class HouseMediator : public Mediator { public: void setLandlord(Person *p) { _landlord = p; } void setRenter(Person *p) { _renter = p; } void sendMessage(string message, Person *p) { if (p == _landlord) // 房東發送信息 { _renter->getMessage(message); } else // 租客發送信息 { _landlord->getMessage(message); } } private: Person *_landlord; // 房東 Person *_renter; // 租客 }; void test() { Mediator *mediator = new HouseMediator; // 房屋中介 Person *renter = new Renter; // 租客 Person *landlord = new Landlord; // 房東 mediator->setLandlord(landlord); mediator->setRenter(renter); renter->setMediator(mediator); landlord->setMediator(mediator); renter->sendMessage("我想在上海火車站附近租房子,一室一廳"); landlord->sendMessage("我想出租一室一廳的房子,地點:上海火車站附近"); delete mediator; delete renter; delete landlord; } int main() { test(); cin.get(); return 0; }

效果:

技術分享

中介者模式