一、uml
二、概念
中介者模式(mediator):用乙個中介物件來封裝一系列的物件互動。中介者使各物件不需要顯示地相互引用,從而使其耦合鬆散,而且可以獨立地改變它們之間的互動。
三、說明
角色:(1)colleague:抽象同事類。
(2)concreteclleague:具體同事類,每個具體同事只知道自己的行為,而不了解其他同事類的情況,但它們卻都認識中介者物件。
(3)mediator:抽象中介者,定義了同事物件到中介者物件的介面。
(4)concretemediator:具體中介者物件,實現抽象類的方法,它需要知道所有具體同事類,並從具體同事接收訊息,向具體同事物件發出命令。
中介者模式的優點?
(1)mediator的出現減少了各個colleague的耦合,使得可以獨立地改變和復用各個colleague,比如任何國家的改變不會影響到其他國家,而只是與安理會發生變化。
(2)由於把物件如何協作進行了抽象,將中介作為乙個獨立的概念並將其封裝起在乙個物件中,這樣關注的物件就從物件各自本身的行為轉移到他們之間的互動上來,也就是站在乙個更巨集觀的角度去看待系統。
中介者模式的缺點?
由於concretemediator控制了集中化,於是就把互動複雜性變為了中介者的複雜性,這就使得中介者會變得比任何乙個concretecolleague都複雜。
中介者模式的用途?
中介者模式一般應用於一組物件以定義良好但是複雜的方式進行通訊的場合,以及想定製乙個分布在多個類中的行為,而又不想生成太多的子類的場合。
四、c++實現
(1)un.h
#ifndef _un
#define _un
#include
class country;
using namespace std;
//mediator
class unitednations
;//concretemediator
class unitednationssecuritycouncil:public unitednations
;#endif
(2)un.cpp
#include
#include "un.h"
#include "country.h"
using namespace std;
void unitednationssecuritycouncil::setcolleague1(country* c)
void unitednationssecuritycouncil::setcolleague2(country* c)
void unitednationssecuritycouncil::declare(string message, country* colleague)
(3)country.h
#ifndef _country
#define _country
#include
#include "un.h"
#include
using namespace std;
//colleague
class country
*/ virtual void declare(string message)=0;
virtual void getmessage(string message)=0;
};//concretecolleague
class usa:public country
void declare(string message);
void getmessage(string message);
};//concretecolleague
class iraq:public country
void declare(string message);
void getmessage(string message);
};#endif
(4)country.cpp
#include "country.h"
#include
#include
using namespace std;
void usa::declare(string message)
void usa::getmessage(string message)
{ cout(5)執行截圖
大話設計模式C 實現 第18章
一 uml圖 二 概念 備忘錄 memento 在不破壞封裝性的前提下,捕獲乙個物件的內部狀態,並在該物件之外儲存這個狀態。這樣以後就可將物件恢復到原先儲存的狀態。三 說明 角色 1 originator 發起人 負責建立乙個memento,用以記錄當前時刻它的內部狀態,並可以使用備忘錄恢復內部狀態...
大話設計模式C 實現 第1章 簡單工廠模式
一 uml圖 二 包括的角色 簡單工廠模式包括三個角色 1 工廠類factory 工廠類是用來製造產品的。因此,在factory中有乙個用於製造產品的create函式或者generate函式之類的函式。這個函式可以依據 識別符號 的不同生成不同的concreteproduct,當然這些concret...
大話設計模式 第10章 模板方法模式
重複 易錯 難改 既然用了繼承,並且肯定這個繼承有意義,就應該要成為子類的模板,所有重複的 都應該要上公升到父類去,而不是讓每個子類都去重複。當要完成在某一細節層次一致的乙個過程或一系列步驟,但其個別步驟在更詳細的層次上的實現可能不同時,通常考慮用模板方法模式來處理。模板 template 方法模式...