C# 语言 中介者模式对象解耦

C#阿木 发布于 4 天前 4 次阅读


阿木博主一句话概括:C 中介者模式:实现对象解耦的优雅之道

阿木博主为你简单介绍:
中介者模式是一种行为设计模式,它通过引入一个中介对象来降低多个对象之间的耦合度。在C中,中介者模式可以帮助我们创建一个松散耦合的系统,使得对象之间的交互更加灵活和可维护。本文将围绕C语言中的中介者模式,通过实例代码来展示如何实现对象解耦,并探讨其应用场景和优势。

一、中介者模式简介

中介者模式是一种设计模式,它定义了一个对象来封装一组对象之间的交互,使得对象之间的耦合度降低。在中介者模式中,通常有一个中介者对象和一组被中介者对象。中介者对象负责协调这些对象之间的交互,而不是让它们直接交互。

二、中介者模式的结构

中介者模式的主要角色包括:

1. Mediator(中介者):定义一个接口,用于协调各个同事类之间的交互。
2. ConcreteMediator(具体中介者):实现中介者接口,定义一个具体的协调策略。
3. Colleague(同事类):表示需要交互的对象,实现一个接口,用于定义与中介者交互的方法。

三、C 中介者模式实现

以下是一个简单的C中介者模式实现示例:

csharp
using System;
using System.Collections.Generic;

// 定义中介者接口
public interface IMediator
{
void Notify(string message, object sender);
}

// 实现中介者接口
public class ConcreteMediator : IMediator
{
private Dictionary _colleagues = new Dictionary();

public void RegisterColleague(IColleague colleague)
{
_colleagues[colleague] = colleague;
}

public void Notify(string message, object sender)
{
foreach (var colleague in _colleagues.Values)
{
if (colleague != sender)
{
colleague.Receive(message);
}
}
}
}

// 定义同事类接口
public interface IColleague
{
void Receive(string message);
}

// 实现同事类
public class ColleagueA : IColleague
{
private IMediator _mediator;

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

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

public void Receive(string message)
{
Console.WriteLine("ColleagueA received: " + message);
}
}

public class ColleagueB : IColleague
{
private IMediator _mediator;

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

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

public void Receive(string message)
{
Console.WriteLine("ColleagueB received: " + message);
}
}

class Program
{
static void Main(string[] args)
{
IMediator mediator = new ConcreteMediator();

ColleagueA colleagueA = new ColleagueA(mediator);
ColleagueB colleagueB = new ColleagueB(mediator);

mediator.RegisterColleague(colleagueA);
mediator.RegisterColleague(colleagueB);

colleagueA.Send("Hello from ColleagueA");
colleagueB.Send("Hello from ColleagueB");
}
}

在上面的代码中,我们定义了一个中介者接口`IMediator`和一个具体中介者`ConcreteMediator`。`ConcreteMediator`负责维护一个同事类的字典,并在接收到通知时,将消息转发给所有注册的同事类。`ColleagueA`和`ColleagueB`是同事类的实现,它们通过中介者进行通信。

四、中介者模式的优势

1. 降低耦合度:中介者模式通过引入中介者,使得同事类之间的直接依赖关系减少,从而降低了系统的耦合度。
2. 增强可维护性:由于同事类之间的交互通过中介者进行,因此修改一个同事类对其他同事类的影响较小,提高了系统的可维护性。
3. 提高扩展性:中介者模式使得添加新的同事类变得简单,只需实现`IColleague`接口并注册到中介者即可。

五、总结

中介者模式是一种强大的设计模式,它通过引入中介者来降低对象之间的耦合度,使得系统更加灵活和可维护。在C中,我们可以通过实现中介者接口和同事类接口来创建一个中介者模式的应用。通过本文的示例代码,我们可以看到中介者模式在实际开发中的应用,并了解其优势。在实际项目中,合理运用中介者模式可以帮助我们构建更加健壮和可扩展的系统。