設計模式學習筆記(十九) Mediator中介者

2021-04-12 23:08:51 字數 1685 閱讀 3263

十七、mediator

(中介者)

情景舉例:

用乙個中介物件來封裝一系列的物件互動。

**示例:

/* mediator

抽象父類

*/

class dialogdirector ;

/* 

其他參與者類的父類。注意:它有乙個mediator成員_director,並且在

changed

方法中將自身作為識別引數傳入。另:建構函式中需要配置中介器。

*/

class widget ;

/*

*/

void widget::changed () 

/* 

下面是多個參與者,繼承自相同的父類。

*/

class listbox : public widget;

class entryfield : public widget;

/*

*/

class button : public widget ;

/* 

呼叫changed。其實內部機制就是將自身作為引數傳入父類中的mediator來

通知更新。

*/

void button::handlemouse (mouseevent& event) 

/* 

具體的mediator子類。私有部分中列舉了參與者

*/

class fontdialogdirector : public dialogdirector ;

/*

*/

void fontdialogdirector::createwidgets () 

/* 

在mediator關鍵函式widgetchanged中,根據傳入引數的不同,執行不同的動作。

*/

void fontdialogdirector::widgetchanged (

widget* thechangedwidget

)  else if (thechangedwidget == _ok)  else if (thechangedwidget == _cancel) 

}

個人理解:

中介者模式其實和外觀模式很類似,但主要不同的是:外觀模式是單向的,其參與者不知道外觀的存在;而中介者模式中其參與者清楚知道中介者的存在。

其模式的關鍵是在參與者中配置中介者,在適當的時候呼叫中介者,中介者根據呼叫方的不同作出不同的動作。

設計模式筆記(十九) 命令模式

命令模式 command 將乙個請求封裝為乙個物件,從而使你可用不同的請求對客戶進行引數化 對請示排隊或記錄請求日誌,以及支援可撤消的操作。優點 第一,它能夠較容易的設計乙個命令佇列 第二,在需要的情況下,可以較容易地將命令記入日誌 第三,允許接收請求的一方是否要否決請求。第四,可以容易地實現對請求...

設計模式(十九)命令模式

十九 命令模式 將乙個請求封裝為乙個物件,從而使你可用不同的請求對客戶進行引數化 對請求排隊或記錄請求日誌,以及支援可撤銷的操作。優點 第一,能較容易地設計乙個命令佇列 第二,在需要的情況下,可以較容易地將命令記入日誌 第三,允許接受請求的一方決定是否要否決請求 第四,可以容易地實現對請求的撤銷和重...

設計模式學習筆記二十九 組合模式概念了解

一 問題 1 學校院系展示需求 2 要求要在乙個頁面中展示出學校的院系組成,乙個學校有多少個學院,乙個學校有多個系。3 學校 包含學院。學院包含系 二 實現方式 1 繼承方式 不能很好實現管理 2 組合模式 三 組合模式基本介紹 1 由叫部分整體式,它建立了物件的樹形介面,將物件組合成樹狀結構表示 ...