Mediator 中介者 模式

2021-08-08 03:44:14 字數 2982 閱讀 3593

問題

在物件導向系統的設計和開發過程中, 物件之間的互動和通訊是最為常見的情況, 因為物件間的互動本身就是一種通訊。 在系統比較小的時候, 可能物件間的通訊不是很多、 物件也比較少, 我們可以直接硬編碼到各個物件的方法中。 但是當系統規模變大, 物件的量變引起系統複雜度的急劇增加, 物件間的通訊也變得越來越複雜, 這時候我們就要提供乙個專門處理物件間互動和通訊的類,這個中介者就是 mediator 模式。 mediator 模式提供將物件間的互動和通訊封裝在乙個類中, 各個物件間的通訊不必顯勢去宣告和引用, 大大降低了系統的複雜性能(了解乙個物件總比深入熟悉 n 個物件要好)。另外 mediator 模式還帶來了系統物件間的松耦合,這些將在討論中詳細給出。

模式選擇

mediator 模式典型的結構圖為:

mediator 模式中,每個 colleague 維護乙個 mediator,當要進行互動,例如圖中

concretecolleaguea 和 concretecolleagueb 之間的互動就可以通過concretemediator 提供的doactionfromatob 來處理, concretecolleaguea 和 concretecolleagueb 不必維護對各自的引用,甚至它們也不知道各個的存在。 mediator 通過這種方式將多對多的通訊簡化為了一(mediator) 對(colleague)的通訊 。

實現

完整**示例(code)

mediator 模式實現不是很困難, 這裡為了方便初學者的學習和參考, 將給出完整的實現**。

#ifndef _colleage_h_

#define _colleage_h_

#include

using namespace std;

class mediator;

class colleage

;class concretecolleagea:public colleage

;class concretecolleageb:public colleage

;#endif //~_colleage_h_

**片斷 2: colleage.cpp

include "mediator.h"

include "colleage.h"

include using

namespace

std;

colleage::colleage()

colleage::colleage(mediator* mdt)

colleage::~colleage()

concretecolleagea::concretecolleagea()

concretecolleagea::~concretecolleagea()

concretecolleagea::concretecolleagea(mediator* mdt):colleage(mdt)

string concretecolleagea::getstate()

void concretecolleagea::setstate(const

string& sdt)

void concretecolleagea::aciton()

void concretecolleageb::setstate(const

string& sdt)

**片斷 3: mediator.h

ifndef mediator_h

define mediator_h

class colleage;

class mediator

;class concretemediator:public mediator

;endif //~mediator_h

**片斷 4: mediator.cpp

include "mediator.h"

include "colleage.h"

mediator::mediator()

mediator::~mediator()

concretemediator::concretemediator()

concretemediator::~concretemediator()

concretemediator::concretemediator(colleage* clga,colleage* clgb)

void concretemediator::doactionfromatob()

void concretemediator::setconcretecolleagea(colleage* clga)

void concretemediator::setconcretecolleageb(colleage* clgb)

colleage* concretemediator::getconcretecolleagea()

colleage* concretemediator::getconcretecolleageb()

void concretemediator::introcolleage(colleage* clga,colleage* clgb)

void concretemediator::doactionfrombtoa()

**片斷 5: main.cpp

include "mediator.h"

include "colleage.h"

include using

namespace

std;

int main(int argc,char* argv)

中介者模式(Mediator)

一 適用情況 場景中存在多個角色並且其中多個角色互相存在直接關聯,從而導致過多的強耦合和過複雜的關係網路。此時新增乙個中介者角色,其他都角色只會和中介者發生直接關聯,每個角色都通過中介者間接與其他角色進行溝通,從而化解了之前的強耦合。這裡的中介者如同我們辦公室裡的交換機 路由器,我們用的電腦就是各個...

設計模式 中介者模式Mediator

前言 模式總覽 by xingoo 使用乙個中介的物件,封裝一組物件之間的互動,這樣這些物件就可以不用彼此耦合。這個中介者常常起著中間橋梁的作用,使其他的物件可以利用中介者完成某些行為活動,因此它必須對所有的參與活動的物件瞭如指掌!1 當一組物件要進行溝通或者業務上的互動,但是其關係卻又很複雜混亂時...

行為模式之Mediator 中介者

mediator定義 用乙個中介物件來封裝 一系列關於物件互動行為.為何使用mediator?各個物件之間的互動操作非常多 每個物件的行為操作都依賴彼此對方,修改乙個物件的行 為,同時會涉及到修改很多其他物件的行為,如果使用mediator模式,可以使各個物件間的耦合鬆散,只需關心和 mediato...