設計模式之中介者模式(Mediator)

2022-04-03 08:00:57 字數 3211 閱讀 4258

一、初識中介者模式

那些年,我們一起上過的大學,班級裡有班長,有團書記。想一想如果沒有qq這種通訊工具的話,那麼班長或者團支書該怎樣下達訊息呢??同時,班級上兩個同學之間也可惜溝通啊,溝通一下,院裡哪個女生,哪個帥哥呀~~~如果沒有qq的話,大概就是下面的情景:

哎呀呀,看看這個亂那。如果同學的數目多起來就會變成網狀的結構啦。原本把乙個系統分割成一些物件是可以增強復用性的,但是現在的情況是,這些兌現之間存在著大量的聯絡,耦合性極高。這是很不利於復用的,同時這種情況使得系統的靈活性大大的降低,使得對系統的擴充套件很難,要是新轉來乙個學生的話,要改動的地方就多了去了。

如果現在可以使用qq,那麼可以採用另一種方式設計這個系統呢,比如做成星形的結構:

看看這種「星形結構」和「網狀結構」的區別吧,顯然採用星形結構就可以避免上面的網狀結構存在的問題了,實際上這裡的qq就是指的是中介,這樣一來每個學生物件就不用存在耦合了,同學之間需要交流可以通過乙個qq群。

本人認為,由原來的網狀結構到星形結構的轉變是理解中介者模式比較好的途徑,下面來具體看看中介者模式,

gof說:

中介者模式(mediator pattern):定義乙個中介物件來封裝系列物件之間的互動。中介者使各個物件不需要顯示地相互引用,從而使其耦合性鬆散,而且可以獨立地改變他們之間的互動。

看看結構圖的形象描述吧:

對於設計模式這個東西,理解了,應該寫乙個**體會一下:看看這些類,比如:mediator,concretemediator,colleague和concretecolleage1到底是怎麼組織的。

view code

1 #include 2 #include 3 #include 45

using

namespace

std;67

8//抽象的同事類

9class

colleage10;

16void set_name(string

name)

1720

string

get_name()

2124

void set_content(string

content)

2528

string

get_content()

2932

virtual

void

talk(){};

3334

};35

//具體的同事類:班長

36class monitor : public

colleage37;

40virtual

void

talk()

4144

};45

//具體的同事類:團支書

46class tuanzhishu : public

colleage47;

50virtual

void

talk()

5154

};55

//具體的同事類:同學a

56class studenta : public

colleage57;

60virtual

void

talk()

6164

};65

//具體的同事類:同學b

66class studentb : public

colleage67;

70virtual

void

talk()

7174

};75

//抽象中介者

76class

mediator77;

84virtual

void notify(colleage *student){};

85virtual

void chart(colleage *student1,colleage *student2){};

86};

87//

具體中介者qq通訊平台

88class qqmediator : public

mediator

89101

}102

};103

virtual

void chart(colleage *student1,colleage *student2)

104108

};109

110111

intmain()

112

下面是執行的結果:

看看,這樣就利用qq這個平台完成了同學之間的交流。並且同學之間並沒有相互聯絡,聯絡都是通過qq實現的,如果現在要物件進行擴充套件,比如也可以通過飛信啊,只需要加入class feixin:public mediator就可以了,如果想擴充套件同學c只需要,class studentc:public colleage即可。並且在客戶端的使用也是很方便的哦~~這時回過頭想一想如果不用「中介者模式」的話,系統會是什麼樣呢???

二、使用中介者模式的場合和優缺點

使用終結者模式的場合

1.一組定義良好的物件,現在要進行複雜的通訊。

2.定製乙個分布在多個類中的行為,而又不想生成太多的子類。

可以看出,中介物件主要是用來封裝行為的,行為的參與者就是那些物件,但是通過中介者,這些物件不用相互知道。呵呵~~~

使用中介者模式的優點:

1.降低了系統物件之間的耦合性,使得物件易於獨立的被復用。

2.提高系統的靈活性,使得系統易於擴充套件和維護。

使用中介者模式的缺點:

中介者模式的缺點是顯而易見的,因為這個「中介「承擔了較多的責任,所以一旦這個中介物件出現了問題,那麼整個系統就會受到重大的影響。

設計模式之中介者模式

1 抽象中介者,mediator 抽象中介 author jin.li public abstract class mediator2 具體的中介者,主機板 主機板中介 author jin.li public class mainboard extends mediator if colleagu...

設計模式之中介者模式

中介者模式 假如沒有總經理,下面六個個部門,財務部 市場部 研發部,財務部要發工資,讓大家核對公司需要跟市場部和研發部都通氣,市場部要接個新專案,需要研發部門處理技術,需要財務部出資金,市場部跟各個部門打交道,雖然只有六個個部門,但是關係非常亂 實際上,公司有總經理,各個部門有什麼事情都通報給總結裡...

設計模式之中介者模式

嘮叨幾句 設計模式的案例我已經寫過大部分的案例,但是本人沒有經常寫部落格的習慣,最近在將本人之前在碼雲上的案例直接搬過來 個人感覺容易和外觀模式弄混,所以在這裡做下簡單的比較 外觀模式 本質封裝互動,組合呼叫。就是向外部提供一組功能,但是具體的實現比較複雜,內部有喝多的元件相互組合呼叫,強調的是外觀...