设计模式阅读备忘笔记-中介者模式

本文介绍了中介者模式的概念及其在减少对象耦合中的作用。通过一个具体的代码实例展示了如何使用抽象中介者类和抽象同事类来实现中介者模式,进而使得各个同事类之间的交互更加灵活且易于维护。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

设计模式阅读备忘笔记-中介者模式
中介者模式(Mediator)

这里写图片描述

这里写图片描述

理解:

Mediator的出现减少了各个Colleague的耦合,使得可以独立地改变和复用各个Colleague类和Mediator。
由于把对象如何协作进行了抽象,将中介作为一个独立地概念并将其封装再一个都想中,这样关注地对象就从对象各自本身地行为装换到它们之间地交互上来,也就是站在一个更宏观地角度去看待系统。

代码例子:

//抽象中介者类
abstract class Mediator
{
    public abstract void Send(string msg, Colleague colleague);
}

//抽象同事类
abstract class Colleague
{
    protected Mediator mediator;
    public Colleague(Mediator mediator)
    {
        this.mediator = mediator;
    }
}

class ConcreteColleague1 : Colleague
{
    public ConcreteColleague1(Mediator mediator)
        :base(mediator)
    {

    }
    public void Send(string msg)
    {
        mediator.Send(msg, this);
    }
    public void Notity(string message)
    {
        Console.WriteLine(1+ message);
    }
}

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

    }
    public void Send(string msg)
    {
        mediator.Send(msg, this);
    }
    public void Notity(string message)
    {
        Console.WriteLine(2+ message);
    }
}


//具体中介者类
class ConcreteMediator : Mediator
{
    private ConcreteColleague1 colleague1;
    private ConcreteColleague2 colleague2;

    internal ConcreteColleague1 Colleague1
    {
        set
        {
            colleague1 = value;
        }
    }

    internal ConcreteColleague2 Colleague2
    {
        set
        {
            colleague2 = value;
        }
    }

    public override void Send(string msg, Colleague colleague)
    {

    }
}

class Test
{
    void Main()
    {
        ConcreteMediator m = new ConcreteMediator();
        ConcreteColleague1 c1 = new ConcreteColleague1(m);
        ConcreteColleague2 c2 = new ConcreteColleague2(m);

        m.Colleague1 = c1;
        m.Colleague2 = c2;

        c1.Send("msg");
        c2.Send("msg");
    }
}
总结:为已有的功能动态添加更多的功能的一种方式,比如新加的功能和字段仅仅是为了满足一些只在某种特定情况下才会执行的特殊需求,就可以使用装饰模式,把新功能单独写在装饰类中,并用装饰类装饰原来的对象,优点是可以把类中的核心职责和装饰功能分开,简化类。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

VniciGino

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值