本文主要是介绍设计模式学习笔记(十九)——Mediator中介者,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
十七、Mediator(中介者)
情景举例:
用一个中介对象来封装一系列的对象交互。
代码示例:
/* Mediator抽象父类
*/
class DialogDirector {
public:
virtual ~DialogDirector();
virtual void ShowDialog();
virtual void WidgetChanged(Widget*) = 0;
/*
*/
protected:
DialogDirector();
virtual void CreateWidgets() = 0;
};
/* 其他参与者类的父类。注意:它有一个Mediator成员_director,并且在
Changed方法中将自身作为识别参数传入。另:构造函数中需要配置中介器。
*/
class Widget {
public:
Widget(DialogDirector*);
virtual void Changed();
virtual void HandleMouse(MouseEvent& event);
// ...
private:
DialogDirector* _director;
};
/*
*/
void Widget::Changed () {
_director->WidgetChanged(this);
}
/* 下面是多个参与者,继承自相同的父类。
*/
class ListBox : public Widget;
class EntryField : public Widget;
/*
*/
class Button : public Widget {
public:
virtual void HandleMouse(MouseEvent& event);
// ...
};
/* 调用Changed。其实内部机制就是将自身作为参数传入父类中的Mediator来
通知更新。
*/
void Button::HandleMouse (MouseEvent& event) {
// ...
Changed();
}
/* 具体的Mediator子类。私有部分中列举了参与者
*/
class FontDialogDirector : public DialogDirector {
public:
FontDialogDirector();
virtual ~FontDialogDirector();
virtual void WidgetChanged(Widget*);
/*
*/
protected:
virtual void CreateWidgets();
/*
*/
private:
Button* _ok;
Button* _cancel;
ListBox* _fontList;
EntryField* _fontName;
};
/*
*/
void FontDialogDirector::CreateWidgets () {
_ok = new Button(this);
_cancel = new Button(this);
_fontList = new ListBox(this);
_fontName = new EntryField(this);
// fill the listBox with the available font names
// assemble the widgets in the dialog
}
/* 在Mediator关键函数WidgetChanged中,根据传入参数的不同,执行不同的动作。
*/
void FontDialogDirector::WidgetChanged (
Widget* theChangedWidget
) {
if (theChangedWidget == _fontList) {
_fontName->SetText(_fontList->GetSelection());
/*
*/
} else if (theChangedWidget == _ok) {
// apply font change and dismiss dialog
// ...
/*
*/
} else if (theChangedWidget == _cancel) {
// dismiss dialog
}
}
个人理解:
中介者模式其实和外观模式很类似,但主要不同的是:外观模式是单向的,其参与者不知道外观的存在;而中介者模式中其参与者清楚知道中介者的存在。
其模式的关键是在参与者中配置中介者,在适当的时候调用中介者,中介者根据调用方的不同作出不同的动作。
这篇关于设计模式学习笔记(十九)——Mediator中介者的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!