行为型模式-中介者模式

using System;
using System.Collections.Generic;
using System.Text;

namespace 中介者模式
{
/*
* 中介者模式意图:用一个中介者对象将一些列对象交互封装,从而降低这些对象间的耦合性并且可以独立地改变对象间的交互关系。
*
* 中介者模式实现要点:1、添加中间对象(中介者)对需要交互的对象的行为进行管理
* 2、通过中介方法,实现对象间的交互,从而实现对象间交互的松散耦合。
*
* 中介者模式优点:1、通过中介模式可以降低对象间的耦合关系
* 2、可以方便的改变对象间的交互方式和关系
* 3、通过集中控制可以增加代码的复用,如若两个对象需要通过一定特殊的方式通信,可以将其通信方式添加中介中,可以减小对象间对通信方式依赖
*
* 中介者模式缺点:1、通过集中控制的方法,有可能增加代码的发杂性和阅读难度
* 2、中介者模式可能对系统产生性能上的影响,因为所有的通信都是通过中介来通信。
*
* 中介者模式适用场景:1、应用于一组对象以定义良好但是复杂的方法进行通信的场合
* 2、想定制一个分布在多个类中的行为,而不想生成太多的子类的场合。
*/


/// <summary>
/// 抽象的中介者,抽象中介
/// </summary>
public abstract class Mediator
{
public abstract void Send( string message, Colleague collegue);
}

/// <summary>
/// 抽象同事类
/// </summary>
public abstract class Colleague
{
// 实现中介注册
protected Mediator mediator;

public Colleague(Mediator mediator)
{
this .mediator = mediator;
}
}

/// <summary>
/// 具体中介者
/// </summary>
public class ConcreteMediator : Mediator
{
private ConcreteColleague1 colleague1;

public ConcreteColleague1 Colleague1
{

set { colleague1 = value; }
}
private ConcreteColleague2 colleague2;

public ConcreteColleague2 Colleague2
{

set { colleague2 = value; }
}

/// <summary>
/// 中介方法,实现中介者间相互调用,从而实现相间的解耦
/// </summary>
/// <param name="message"></param>
/// <param name="colleague"></param>
public override void Send( string message, Colleague colleague)
{
if (colleague == colleague1)
{
colleague2.Notify(message);

}
if (colleague == colleague2)
{
colleague1.Notify(message);

}

}
}

/// <summary>
/// 具体同事类
/// </summary>
public class ConcreteColleague1 : Colleague
{
public ConcreteColleague1(Mediator mediator): base (mediator)
{

}

public void Send( string message)
{
// 通过中介实现相互调用
mediator.Send(message, this );
}

public void Notify( string message)
{
// 具体需要实现的业务逻辑代码
}
}


public class ConcreteColleague2 : Colleague
{
public ConcreteColleague2(Mediator mediator)
:
base (mediator)
{
}

public void Notify( string message)
{
// 具体需要实现的代码
}
public void Send( string message)
{
mediator.Send(message,
this );

}
}

public class AppClient
{
public 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;

c1.Send(
" C1通过中介者发送到C2的信息 " );
c2.Send(
" C2通过总结着回应C1的信息 " );


}
}


}

转载于:https://www.cnblogs.com/lhming/archive/2011/03/22/1991942.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值