动机:在系统构建过程中,经常出现多个对象相互关联交互的情况,对象之间常常会维持一种复杂的引用关系,面对变化能力弱。用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式的相互引用,从而使其耦合松散,而且可以独立地改变它们之间的变化。
场景:考虑一个文本编辑器,包含剪切菜单、粘帖按钮、文本编辑区域、剪贴板等对象,它们需要相互引用和交互。
结构
代码
要点:
1、本模式将多个对象间复杂的关联关系解耦,对多个对象间的控制逻辑进行集中管理,变“多个对象互相关联”为“多个对象和一个中介者关联”,简化了系统维护,能更好地面对变化。
2、随着控制逻辑的复杂化,Mediator具体对象的实现可能相当复杂,这时候可对其进行分解处理。
3、Facade模式是解耦系统外到系统内(单向)的对象关联关系;本模式是解耦系统内各个对象之间(双向)的关联关系。
场景:考虑一个文本编辑器,包含剪切菜单、粘帖按钮、文本编辑区域、剪贴板等对象,它们需要相互引用和交互。
结构
代码
namespace DesignPattern.Mediator
{
public abstract class Mediator
{
private IList<Control> controls;
public Mediator()
{
controls = new IList<Control> ();
}
// 管理交互
public abstract void ControlChanged(Control control);
public void Add(Control control)
{
controls.Add(control);
}
}
public class CutMediator : Mediator
{
public CutMediator()
: base()
{
}
public override void ControlChanged(Control control)
{
if (control is CutMenuItem)
{
}
else if (control is PasteButton)
{
}
else if (control is TextArea)
{
}
else if (control is ClipBoard)
{
}
}
}
}
{
public abstract class Mediator
{
private IList<Control> controls;
public Mediator()
{
controls = new IList<Control> ();
}
// 管理交互
public abstract void ControlChanged(Control control);
public void Add(Control control)
{
controls.Add(control);
}
}
public class CutMediator : Mediator
{
public CutMediator()
: base()
{
}
public override void ControlChanged(Control control)
{
if (control is CutMenuItem)
{
}
else if (control is PasteButton)
{
}
else if (control is TextArea)
{
}
else if (control is ClipBoard)
{
}
}
}
}
namespace DesignPattern.Mediator
{
public abstract class Control
{
private Mediator mediator;
public Control(Mediator mediator)
{
this.mediator = mediator;
}
public virtual void Changed()
{
mediator.ControlChanged(this);
}
}
public class CutMenuItem : Control
{
public CutMenuItem(Mediator mediator)
: base(mediator)
{
}
public override void Changed()
{
//
base.Changed();
}
}
public class PasteButton : Control
{
public PasteButton(Mediator mediator)
: base(mediator)
{
}
public override void Changed()
{
//
base.Changed();
}
}
public class TextArea : Control
{
public TextArea(Mediator mediator)
: base(mediator)
{
}
public override void Changed()
{
//
base.Changed();
}
}
public class ClipBoard : Control
{
public ClipBoard(Mediator mediator)
: base(mediator)
{
}
public override void Changed()
{
//
base.Changed();
}
}
}
{
public abstract class Control
{
private Mediator mediator;
public Control(Mediator mediator)
{
this.mediator = mediator;
}
public virtual void Changed()
{
mediator.ControlChanged(this);
}
}
public class CutMenuItem : Control
{
public CutMenuItem(Mediator mediator)
: base(mediator)
{
}
public override void Changed()
{
//
base.Changed();
}
}
public class PasteButton : Control
{
public PasteButton(Mediator mediator)
: base(mediator)
{
}
public override void Changed()
{
//
base.Changed();
}
}
public class TextArea : Control
{
public TextArea(Mediator mediator)
: base(mediator)
{
}
public override void Changed()
{
//
base.Changed();
}
}
public class ClipBoard : Control
{
public ClipBoard(Mediator mediator)
: base(mediator)
{
}
public override void Changed()
{
//
base.Changed();
}
}
}
要点:
1、本模式将多个对象间复杂的关联关系解耦,对多个对象间的控制逻辑进行集中管理,变“多个对象互相关联”为“多个对象和一个中介者关联”,简化了系统维护,能更好地面对变化。
2、随着控制逻辑的复杂化,Mediator具体对象的实现可能相当复杂,这时候可对其进行分解处理。
3、Facade模式是解耦系统外到系统内(单向)的对象关联关系;本模式是解耦系统内各个对象之间(双向)的关联关系。
欢迎光临我的淘宝http://shop35795100.taobao.com,专营游戏点卡、电话卡及各类充值卡。