MediatorPattern-中介者模式

在C#中,中介者模式(Mediator Pattern)是一种行为型设计模式,它通过将对象之间的交互行为封装到一个中介者对象中,来解耦对象之间的复杂关系。中介者模式能够减少对象之间的直接依赖,提高系统的灵活性和可维护性。

中介者模式有以下几个关键角色:

Mediator(中介者):定义了对象之间的交互接口,可以是抽象类或接口。通常包括注册、转发消息等方法。

ConcreteMediator(具体中介者):实现了中介者接口,负责协调各个对象之间的交互关系。

Colleague(同事):定义了对象之间交互的接口,可以是抽象类或接口。通常包括发送和接收消息等方法。

ConcreteColleague(具体同事):实现了同事接口,负责实现具体的交互行为。

下面是一个示例,展示如何在C#中使用中介者模式来协调多个同事对象之间的交互:

namespace MediatorPattern_中介者模式
{
    public interface IMediator
    {
        void Send(string message, Colleague colleague);
    }

    // ConcreteMediator
    public class Chatroom : IMediator
    {
        private readonly List<Colleague> _colleagues = new List<Colleague>();

        public void AddColleague(Colleague colleague)
        {
            _colleagues.Add(colleague);
        }

        public void Send(string message, Colleague colleague)
        {
            foreach (var c in _colleagues)
            {
                if (c != colleague)
                {
                    c.Receive(message);
                }
            }
        }
    }
    // Colleague
    public abstract class Colleague
    {
        protected readonly IMediator _mediator;

        public Colleague(IMediator mediator)
        {
            _mediator = mediator;
        }

        public abstract void Send(string message);
        public abstract void Receive(string message);
    }

    // ConcreteColleague
    public class User : Colleague
    {
        public User(IMediator mediator) : base(mediator)
        {
        }

        public override void Send(string message)
        {
            _mediator.Send(message, this);
        }

        public override void Receive(string message)
        {
            Console.WriteLine("Received message: " + message);
        }
    }
}
namespace MediatorPattern_中介者模式
{
    internal class Program
    {
        static void Main(string[] args)
        {
            Chatroom chatroom = new Chatroom();

            User user1 = new User(chatroom);
            User user2 = new User(chatroom);
            User user3 = new User(chatroom);

            chatroom.AddColleague(user1);
            chatroom.AddColleague(user2);
            chatroom.AddColleague(user3);

            user1.Send("Hello, everyone!");
            //输出结果
            //Received message: Hello, everyone!
            //Received message: Hello, everyone!

            Console.Read();
        }
    }
}

在上述示例中,使用中介者模式实现了一个聊天室的功能。IMediator是中介者接口,定义了发送消息的方法Send。Chatroom是具体中介者,实现了中介者接口,负责协调各个User对象之间的交互。Colleague是同事接口,定义了发送和接收消息的方法。User是具体同事,实现了同事接口,通过中介者对象发送和接收消息。

在Client中,首先创建了一个聊天室(Chatroom)对象,并创建了多个用户(User)对象。然后将用户对象添加到聊天室中,并通过用户对象调用Send方法发送消息。聊天室在收到消息后会将消息转发给其他用户。

通过中介者模式,可以将复杂的对象之间的交互关系拆分为简单的一对多的关系,仅需关注中介者对象,而无需关注其他同事对象的具体实现细节。这样可以降低对象之间的耦合度,提高系统的可维护性和扩展性。中介者模式还可以隐藏对象之间的交互细节,使系统更加灵活和可复用。

 

中介者模式(Mediator Pattern)是一种行为型设计模式,它通过引入一个中介者对象来协调多个相关对象之间的交互,从而减少对象之间的直接耦合。中介者模式具有以下优点和缺点:

优点:

  1. 解耦对象之间的关系:中介者模式将对象之间的直接通信转变为通过中介者对象进行间接通信,从而将对象之间的依赖关系解耦。对象只需与中介者对象进行通信,而不需要直接与其他对象交互。

  2. 减少类之间的耦合:中介者模式将对象之间的交互逻辑封装在中介者对象中,使得各个对象之间可以独立变化,互不影响。新增、修改或删除对象,不会对其他对象产生影响。

  3. 促进代码的重用性:中介者模式将对象之间的通信逻辑集中在中介者对象中,可以在不同的对象组合中复用中介者对象,避免了代码的重复编写。

  4. 提供了更灵活的交互方式:中介者模式可以通过中介者对象灵活地定义对象之间的交互方式和规则,可以根据需求进行动态调整,扩展性强。

缺点:

  1. 中介者对象的复杂性:中介者模式中,中介者对象需要负责管理多个相关对象之间的交互,可能会导致中介者对象变得复杂且难以维护。在复杂场景下,中介者对象的职责会变得很多。

  2. 增加系统复杂性:引入中介者模式可能会增加系统的复杂性和理解难度。需要对对象之间的交互关系有清晰的把握,同时需要设计良好的中介者对象。

  3. 可能降低系统性能:中介者模式中,所有的对象之间的交互都需要通过中介者对象进行传递,可能会导致系统的性能下降。特别是在交互逻辑复杂且对象较多的情况下。

需要根据具体的应用场景和需求来评估使用中介者模式的利弊。中介者模式适用于对象之间存在复杂的交互逻辑,或者需要减少对象之间的直接耦合的情况。通过权衡其优点和缺点,可以选择是否使用中介者模式。

posted @ 2023-08-23 10:15  ZHIZRL  阅读(16)  评论(0编辑  收藏  举报