unity 中介者模式范例

实现Colleague1和Colleague2通过Mediator交流(SendMessage)。
// 抽象同事类
public abstract class Colleague
{
    protected Mediator m_Mediator = null;   // 通过Mediator 对外沟通, 指向中介者

    public Colleague(Mediator theMediator)
    {
        m_Mediator = theMediator;
    }

    // Mediator 通知请求
    public abstract void Request(string Message);
}

// 实现Colleague的类1
public class ConcreateColleague1 : Colleague
{
    public ConcreateColleague1(Mediator theMediator) : base(theMediator) { }

    // 执行动作
    public void Action()
    {
        // 执行后通知其他Colleague
        m_Mediator.SendMessage(this, "Colleague1发出通知");
    }

    // Mediator 通知请求
    public override void Request(string Message)
    {
        Debug.Log("ConcreateColleague1.Request: " + Message);
    }
}

// 实现Colleague的类2
public class ConcreateColleague2 : Colleague
{
    public ConcreateColleague2(Mediator theMediator) : base(theMediator) { }

    // 执行动作
    public void Action()
    {
        // 执行后通知其他Colleague
        m_Mediator.SendMessage(this, "Colleague2发出通知");
    }

    // Mediator 通知请求
    public override void Request(string Message)
    {
        Debug.Log("ConcreateColleague2.Request: " + Message);
    }
}

/// <summary>
/// Mediator抽象类
/// </summary>
public abstract class Mediator
{
    /// <summary>
    /// 用来从外界传递信息给Colleague
    /// </summary>
    public abstract void SendMessage(Colleague theColleague, string Message);
}


/// <summary>
/// 实现Mediator接口,集合管理Colleague对象
/// </summary>
public class ConcreateMediator : Mediator
{
    ConcreateColleague1 m_Colleague1 = null;
    ConcreateColleague2 m_Colleague2 = null;

    public void SetColleague1(ConcreateColleague1 theColleague)
    {
        m_Colleague1 = theColleague;
    }
    public void SetColleague2(ConcreateColleague2 theColleague)
    {
        m_Colleague2 = theColleague;
    }

    // 收到来自Colleague的通知请求
    public override void SendMessage(Colleague theColleague, string Message)
    {
        // 收到信息后的处理逻辑:
        // 收到Colleague1通知Colleague2
        if (m_Colleague1 == theColleague)
        {
            m_Colleague2.Request(Message);
        }
        // 收到Colleague2通知Colleague1
        if (m_Colleague2 == theColleague)
        {
            m_Colleague1.Request(Message);
        }
    }
}

测试用例:

void UnitTest()
{
    ConcreateMediator pMediator = new ConcreateMediator();   // 产生中介者

    ConcreateColleague1 pColleague1 = new ConcreateColleague1(pMediator);  // 产生Colleague并传给中介者
    ConcreateColleague2 pColleague2 = new ConcreateColleague2(pMediator);

    pMediator.SetColleague1(pColleague1);
    pMediator.SetColleague2(pColleague2);

    pColleague1.Action();
    pColleague2.Action();
    }

运行结果:

ConcreateColleague2.Request: colleague1发来通知
ConcreateColleague1.Request: colleague2发来通知
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
我可以回答这个问题。以下是一个简单的 Unity 中介者模式的代码示例: ``` public interface IColleague { void Send(string message); void Receive(string message); } public class ConcreteColleagueA : IColleague { private Mediator mediator; public ConcreteColleagueA(Mediator mediator) { this.mediator = mediator; } public void Send(string message) { mediator.Send(message, this); } public void Receive(string message) { Debug.Log("ConcreteColleagueA received message: " + message); } } public class ConcreteColleagueB : IColleague { private Mediator mediator; public ConcreteColleagueB(Mediator mediator) { this.mediator = mediator; } public void Send(string message) { mediator.Send(message, this); } public void Receive(string message) { Debug.Log("ConcreteColleagueB received message: " + message); } } public class Mediator { private ConcreteColleagueA colleagueA; private ConcreteColleagueB colleagueB; public void SetColleagueA(ConcreteColleagueA colleagueA) { this.colleagueA = colleagueA; } public void SetColleagueB(ConcreteColleagueB colleagueB) { this.colleagueB = colleagueB; } public void Send(string message, IColleague colleague) { if (colleague == colleagueA) { colleagueB.Receive(message); } else if (colleague == colleagueB) { colleagueA.Receive(message); } } } ``` 在这个示例中,ConcreteColleagueA 和 ConcreteColleagueB 是两个同事类,它们都实现了 IColleague 接口。Mediator 是中介者类,它负责协调两个同事类之间的通信。当 ConcreteColleagueA 发送消息时,它会调用 Mediator 的 Send 方法,并将自己作为参数传递进去。Mediator 根据传入的参数判断应该将消息发送给哪个同事类,然后调用该同事类的 Receive 方法。同样的,当 ConcreteColleagueB 发送消息时,也是通过 Mediator 来实现的。 这个示例中的中介者模式可以帮助我们减少同事类之间的耦合度,使得它们更加独立和可复用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值