浅谈设计模式之中介者模式

转载至http://blog.csdn.net/u014747294/article/details/51577392

中介者模式(Mediator):用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。

这个模式我们可以简单的类比于星型结构,中介者就是中心,其他对象的交互都是通过中心的中介者作为媒介,而不是直接交互,这样就避免了对象直接交互导致的关系混乱,不易维护的缺点。

UML图如下:


  //抽象中介者类
abstract class Mediator
{
public abstract void Send(string message, Colleague colleague);
}
//抽象同事类
abstract class Colleague
{
protected Mediator mediator;
public Colleague(Mediator mediator)
{
this.mediator = mediator;
}
}
//具体中介者类 
class ConcreteMediator : Mediator
{
public ConcreteColleague1 colleague1;
public ConcreteColleague2 colleague2;
public override void Send(string message, Colleague colleague)
{
if (colleague == colleague1)
{
colleague2.Notify(message);
}
else
{
colleague1.Notify(message);
}
}
}
//具体同事类 
class ConcreteColleague1 : Colleague
{
public ConcreteColleague1(Mediator mediator) : base(mediator) { }
public void Send(string message)
{
this.mediator.Send(message, this);
}
public void Notify(string message)
{
Print("同事1收到消息");
}
private void Print(string p)
{
throw new NotImplementedException();
}
}
//具体同事类   
class ConcreteColleague2 : Colleague
{
public ConcreteColleague2(Mediator mediator) : base(mediator) { }
public void Send(string message)
{
mediator.Send(message, this);
}
public void Notify(string message)
{
Print("同事2收到消息");
}
private void Print(string p)
{
throw new NotImplementedException();
}


//测试
static void Main(string[] args)
{
ConcreteMediator mediator = new ConcreteMediator();
ConcreteColleague1 c1 = new ConcreteColleague1(mediator);
ConcreteColleague2 c2 = new ConcreteColleague2(mediator);
mediator.colleague1 = c1;
mediator.colleague2 = c2;
//发送消息,其实都是通过mediator对象发送的
c1.Send("第一则消息");
c2.Send("第二则消息");
Console.Read();
}
}

中介者模式一般应用于一组对象以定义良好但是复杂的方式进行通信的场合,以及向定制一个分布在多个类中的行为,而又不想生成太多子类的场合。

中介者模式的主要优点在于简化了对象之间的交互,将各同事解耦,还可以减少子类生成,对于复杂的对象之间的交互,通过引入中介者,可以简化各同事类的设计和实现。

中介者模式主要缺点在于具体中介者类中包含了同事之间的交互细节,可能会导致具体中介者类非常复杂,使得系统难以维护。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值