生活随笔
收集整理的這篇文章主要介紹了
设计模式理解:中介者模式(Mediator)
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
中介者模式(Mediator Pattern)是用來降低多個(gè)對象和類之間的通信復(fù)雜性。這種模式提供了一個(gè)中介類,該類通常處理不同類之間的通信,并支持松耦合,使代碼易于維護(hù)。
兩個(gè)類或者多個(gè)類之間存在相互引用的情況,那么對象之間的關(guān)聯(lián)性就會變復(fù)雜,維護(hù)起來會更加困難。所以,中介模式就是幫助對象之間的解耦。和門面模式(外觀模式)不一樣的是,門面模式是為了解耦系統(tǒng)間的關(guān)系,而中介者模式是為了解耦對象之間的關(guān)系。
中介者模式UML圖,其中空心箭頭表示繼承,黑色箭頭表示引用。該圖表示,實(shí)體中介者M(jìn)ediator依賴于同事實(shí)體,而同事抽象依賴于Mediator抽象類。把原本同事之間的依賴關(guān)系,變成了同事和中介者之間的依賴。類似于交換機(jī)和路由器的結(jié)構(gòu)。
為什么ConcreteMediator不直接依賴Colleague呢? 因?yàn)镃oncreteMediator要設(shè)計(jì)一套規(guī)則,來了解具體該交流的對象是哪一個(gè)
?
?
例如有這樣的一個(gè)場景: 點(diǎn)擊一次按鈕會讓界面和進(jìn)度條的方式發(fā)生改變,而界面里又包含按鈕和進(jìn)度條。所以按鈕依賴于界面和進(jìn)度條,界面依賴于按鈕和進(jìn)度條,為了簡化它們之間的關(guān)聯(lián)關(guān)系,運(yùn)用中介者模式如下:
?
//中介者
class IMediator{virtual void change(string status);
}
//實(shí)體類需實(shí)現(xiàn)的接口
class Widget{
public:IMediator * iMediator;virtual void request() = 0;
}//創(chuàng)建實(shí)體類
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)建實(shí)體中介關(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();/***如果傳進(jìn)來的對象是 button類型的* 那么輸出是 "Button 發(fā)送請求" "ProgressBar 收到信息" "UserInterface 收到信息"* 如果傳進(jìn)來的對象是 UserInterface類型的* 那么輸出是 "UserInterface 發(fā)送請求" "Button 收到信息" "ProgressBar 收到信息" */
}
?
中介者的缺點(diǎn)也是顯而易見的。就是要處理對象關(guān)聯(lián)關(guān)系越多,對象越多,那么中介者類也會變得越來越臃腫。
總結(jié)
以上是生活随笔為你收集整理的设计模式理解:中介者模式(Mediator)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。