Net设计模式实例之中介者模式(Mediator Pattern)(1)

一、中介者模式简介(Brief Intro<?XML:NAMESPACE PREFIX = ST1 />duction

中介者模式( Mediator Pattern ),定义一个中介对象来封装系列对象之间的交互。中介者使各个对象不需要显示地相互引用,从而使其耦合性松散,而且可以独立地改变他们之间的交互。 Define an object that encapsulates how a set of objects interact. Mediator promotes loose coupling by keeping objects from referring to each other explicitly, and it lets you vary their interaction independently
中介者减少了各个同事对象的耦合,使得可以独立地改变和复用各个同事对象和中介者类;由于把对想如何协作进行了抽象,将中介作为一个独立的概念并将其封装在一个对象中,这样关注的对象就从对象各自本身的行为转移到他们之间的交互上来,也就是站在一个更宏伟的角度去考虑系统。

二、解决的问题(What To Solve

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

三、中介者模式分析(Analysis

1、中介者模式结构

<?XML:NAMESPACE PREFIX = V /><?XML:NAMESPACE PREFIX = O />
Mediator :抽象中介者,定义了同事对象交互的接口。
ConcreteMediator :具体中介者对象,实现抽象类中的方法,此具体中介者对象需要知道所有具体同事类,并从具体同事接受消息,向具体同事对象发送命令。
Coll eague 类:抽象同事类。
ConcreteColleague1 类,ConcreteColleague2 :具体同事类,实现抽象同事类中的方法。每一个同时类需要知道中介者对象;每个具体同事类只需要了解自己的行为,而不需要了解其他同事类的情况。

2、源代码

1 中介者类 Mediator 及其具体实现类 ConcreteMediator

/// <summary>

/// The 'Mediator' abstract class

/// </summary>

abstract class Mediator

{

    public abstract void Send(string message,Colleague coll eague);

}

/// <summary>

/// The 'ConcreteMediator' class

/// </summary>

class ConcreteMediator : Mediator

{

    private ConcreteColleague1 _coll eague1;

    private ConcreteColleague2 _coll eague2;

    public ConcreteColleague1 Coll eague1

    {

        set { _coll eague1 = value ; }

    }

 

    public ConcreteColleague2 Coll eague2

    {

        set { _coll eague2 = value ; }

    }

    public override void Send(string message,Colleague coll eague)

    {

        if (coll eague == _coll eague1)

        {

            _coll eague2.Notify(message);

        }

        else

        {

            _coll eague1.Notify(message);

        }

    }

}

 

2 、抽象同事类 Coll eague 及其实现类 ConcreteColl eague1 ConcreteColleague2

/// <summary>

/// The 'Coll eague' abstract class

/// </summary>

abstract class Colleague

{

    protected Mediator mediator;

    // Constructor

    public Coll eague(Mediator mediator)

    {

        this .mediator = mediator;

    }

}

/// <summary>

/// A 'ConcreteColl eague' class

/// </summary>

class ConcreteColleague1 : Colleague

{

 

    // Constructor

    public ConcreteColl eague1(Mediator mediator)

 

        : base (mediator)

    {

    }

    public void Send(string message)

    {

        mediator.Send(message, this );

    }

    public void Notify(string message)

    {

        Console .WriteLine("Colleague1 gets message: " + message);

    }

}

/// <summary>

/// A 'ConcreteColl eague' class

/// </summary>

class ConcreteColleague2 : Colleague

{

    // Constructor

    public ConcreteColl eague2(Mediator mediator)

 

        : base (mediator)

    {

    }

    public void Send(string message)

    {

        mediator.Send(message, this );

    }

    public void Notify(string message)

    {

        Console .WriteLine("Colleague2 gets message: " + message);

    }

}

 

3 、客户端代码

static void <?XML:NAMESPACE PREFIX = ST2 />Main (string [] args)

{

    ConcreteMediator m = new ConcreteMediator ();

    ConcreteColleague1 c1 = new ConcreteColleague1 (m);

    ConcreteColleague2 c2 = new ConcreteColleague2 (m);

    m.Coll eague1 = c1;

    m.Coll eague2 = c2;

    c1.Send("How are you? JamesHao" );

    c2.Send("Fine, thanks" );

    // Wait for user

    Console .ReadKey();

}

3、程序运行结果

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值