日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

设计模式理解:中介者模式(Mediator)

發(fā)布時間:2024/10/14 asp.net 141 豆豆
生活随笔 收集整理的這篇文章主要介紹了 设计模式理解:中介者模式(Mediator) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

中介者模式(Mediator Pattern)是用來降低多個對象和類之間的通信復雜性。這種模式提供了一個中介類,該類通常處理不同類之間的通信,并支持松耦合,使代碼易于維護。

兩個類或者多個類之間存在相互引用的情況,那么對象之間的關(guān)聯(lián)性就會變復雜,維護起來會更加困難。所以,中介模式就是幫助對象之間的解耦。和門面模式(外觀模式)不一樣的是,門面模式是為了解耦系統(tǒng)間的關(guān)系,而中介者模式是為了解耦對象之間的關(guān)系。

中介者模式UML圖,其中空心箭頭表示繼承,黑色箭頭表示引用。該圖表示,實體中介者Mediator依賴于同事實體,而同事抽象依賴于Mediator抽象類。把原本同事之間的依賴關(guān)系,變成了同事和中介者之間的依賴。類似于交換機和路由器的結(jié)構(gòu)。

為什么ConcreteMediator不直接依賴Colleague呢? 因為ConcreteMediator要設計一套規(guī)則,來了解具體該交流的對象是哪一個

?

?

例如有這樣的一個場景: 點擊一次按鈕會讓界面和進度條的方式發(fā)生改變,而界面里又包含按鈕和進度條。所以按鈕依賴于界面和進度條,界面依賴于按鈕和進度條,為了簡化它們之間的關(guān)聯(lián)關(guān)系,運用中介者模式如下:
?

//中介者 class IMediator{virtual void change(string status); } //實體類需實現(xiàn)的接口 class Widget{ public:IMediator * iMediator;virtual void request() = 0; }//創(chuàng)建實體類 class Button:public Widget{void request(){this->iMediator->change("BUTTON");}void show1(){cout<<"Button 收到信息";} }class ProgressBar:public Widget{void request(){this->iMediator->change("PROGRESSBAR");}void show2(){cout<<"ProgressBar 收到信息";} }class UserInterface:public Widget{void request(){this->iMediator->change("USERINTERFACE");}void show3(){cout<<"UserInterface 收到信息";} }//創(chuàng)建實體中介關(guān)系 class concreteMediator{UserInterface *userInterface;ProgressBar * progressBar;Button * buttonvoid change(string status){if ("BUTTON" == status){cout <<"Button 發(fā)送請求"progressBar ->show2();userInterface ->show3();}else if ("PROGRESSBAR" == status){//沒有啥東西}else if("USERINTERFACE" == status){cout <<"USERINTERFACE發(fā)送請求"button->show1();progressBar ->show2();}} }//主函數(shù)示例 void mainProcess(Widget*widget){widget->request();/***如果傳進來的對象是 button類型的* 那么輸出是 "Button 發(fā)送請求" "ProgressBar 收到信息" "UserInterface 收到信息"* 如果傳進來的對象是 UserInterface類型的* 那么輸出是 "UserInterface 發(fā)送請求" "Button 收到信息" "ProgressBar 收到信息" */ }

?

中介者的缺點也是顯而易見的。就是要處理對象關(guān)聯(lián)關(guān)系越多,對象越多,那么中介者類也會變得越來越臃腫。

總結(jié)

以上是生活随笔為你收集整理的设计模式理解:中介者模式(Mediator)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。