背景:在软件构建过程中,经常会出现多个对象互相关联交互的情况,对象之间常常会维持一种复杂的引用关系,如果遇到一些需求的更改,这种直接的引用关系将会面临不断的变化。在这种情况下,我们可以使用一个“中介对象”来管理对象间的关联关系,避免相互交互的对象之间的紧耦合引用关系,从而更好地抵御变化。
《设计模式》Gof :用一个中介对象来封装一系列对象的交互。中介者使各对象不需要显示的相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。
演化:
(一)
class MenuItem
{
TextArea textarea;
ClipBoard clipboard;
ToolBarButton toolbarbutton;
public:
void click()
{
//比如这样一个操作:从文本区选一段文件,剪到剪贴板,同时toolbar中的parse可用
string text = textarea.selectedtext();
textarea.removeselectiontext();
clipboard.setdata(text);
toolbarbutton.enableparsebutton(true);
}
}
class TextArea
{
ClipBoard clipboard;
ToolBarButton toolbarbutton;
cutmenuitem cutmenuitem;
public:
void process()
{
}
}
class ClipBoard
{
ToolBarButton toolbarbutton;
cutmenuitem cutmenuitem;
TextArea textarea;
}
class ToolBarBooton
{
cutmenuitem cutmenuitem;
TextArea textarea;
ClipBoard clipboard;
}
(二)
class abstract class Mediator
{
public :
abstract void notify() ;
}
abstract Element
{
Mediator mediator;
public Element(Mediator &mediator)
{
mediator = mediator;
}
public void onchanged()
{
mediator.notify();
}
}
class CutMenuItem:Element
{
public void click()
{
onchanged();
}
}
class TextArea:Element
{
public void process()
{
onchanged();
}
}
class ClipBoard::Element
{
public void invok()
{
onchanged();
}
}
class ToolBarButton:Element
{
public void click()
{
onchanged();
}
}
************************
class CorrectMediator: Mediator
{
public override notify()
{
}
}
class abstract class Mediator
{
public :
abstract void notify() ;
abstract void addelement(element & element)
{
list.add(element);
}
ArraryList<Element> list = new ArraryList<Element>();
}
abstract Element
{
Mediator mediator;
public Element(Mediator &mediator)
{
this->mediator = mediator;
this->mediator.addelement(this);
}
public void onchanged()
{
mediator.notify();
}
}
本文探讨了软件构建中对象间复杂引用关系的问题,并介绍了如何通过中介者模式来解决这些问题。通过一个具体的例子,展示了如何利用中介者模式降低对象间的耦合度,使得各组件能够更加独立地工作。
237

被折叠的 条评论
为什么被折叠?



