C#设计模式之Mediator中介者模式解决程序员的七夕缘分问题示例

我们来详细讲解一下“C#设计模式之Mediator中介者模式解决程序员的七夕缘分问题示例”的攻略。

1. Mediator中介者模式

在软件设计中,Mediator中介者模式是一种行为型设计模式,旨在减小对象间的耦合度,它是通过将一个系统的多个对象之间的通信封装到一个中介者对象中,来解耦对象之间的直接依赖关系。

2. 解决程序员的七夕缘分问题示例

假设我们有两位程序员小明和小红,他们在公司中工作,在七夕节前夕,他们都想给自己的对象买上一份礼物,但他们对于代购渠道并不擅长,因此他们想通过公司中介的方式解决这个问题。这就需要我们运用中介者模式来实现。

2.1. Mediator中介者抽象类

首先,我们需要定义一个抽象的中介者类,它需要定义一些公共的接口和属性,用于管理程序员和代购之间的交互和信息传递。在这个示例中,我们需要定义Mediator抽象类,如下所示:

abstract class Mediator
{
    public abstract void SetBuyer(Buyer buyer);
    public abstract void SetSupplier(Supplier supplier);
    public abstract void Notify(string message);
}

在上述定义中,我们定义了SetBuyer方法和SetSupplier方法来设置程序员和代购对象,在方法内部会将对象存储起来以供将来使用。Notify方法则用于在程序员和代购之间进行实时消息的传递。

2.2. ConcreteMediator中介者实现类

接下来,我们需要实现具体的中介类,用于实现程序员和代购之间的交互。我们定义了一个名为“LoveMediator”的中介者类实现ConcreteMediator类的的定义,代码如下所示:

class LoveMediator : Mediator
{
    private Buyer _buyer;
    private Supplier _supplier;

    public override void SetBuyer(Buyer buyer)
    {
        this._buyer = buyer;
    }

    public override void SetSupplier(Supplier supplier)
    {
        this._supplier = supplier;
    }

    public override void Notify(string message)
    {
        if (message != "Coupon Available")
        {
            _buyer.Receive(message);
        }
        else
        {
            _supplier.Receive(message);
        }
    }
}

在上述代码中,我们创建了一个名为“LoveMediator”的中介者,并定义了SetBuyer方法和SetSupplier方法,用于设置程序员和代购对象。Notify方法用于在程序员和代购之间进行实时消息的传递。当消息不是“Coupon Available”时,我们允许该消息传递给程序员,否则传递给代购。

2.3. Colleague同事抽象类

接下来,我们需要定义一个抽象的同事类,用于实现程序员和代购之间的交互。我们定义了Colleague抽象类,如下所示:

abstract class Colleague
{
    protected Mediator _mediator;

    public Colleague(Mediator mediator)
    {
        this._mediator = mediator;
    }

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

在上述代码中,我们抽象了同事的基本操作,定义了Send方法和Receive方法,用于发送和接收消息。同时,我们还在同事类中存储了一个Mediator对象,用于实现程序员和代购之间的交互。

2.4. ConcreteColleague具体同事实现类

最后,我们需要实现具体的同事类,用于实现程序员和代购之间的实际交互。我们定义了一个名为“Buyer”的程序员类和名为“Supplier”的代购类。在Buyer和Supplier类中,我们实现了Send方法和Receive方法,用于发送和接收消息,具体代码如下所示:

class Buyer : Colleague
{
    public Buyer(Mediator mediator) : base(mediator) { }

    public override void Send(string message)
    {
        Console.WriteLine("Sending message: " + message);
        _mediator.Notify(message);
    }

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

class Supplier : Colleague
{
    public Supplier(Mediator mediator) : base(mediator) { }

    public override void Send(string message)
    {
        Console.WriteLine("Sending message: " + message);
        _mediator.Notify(message);
    }

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

在上述代码中,我们分别定义了Buyer和Supplier类,它们是具体的同事类,并实现了Send方法和Receive方法,用于发送和接收消息,具体来说,当调用Send方法时,同事对象会调用中介者的Notify方法,向中介者发送消息。当中介者收到消息后,会实时地将消息分发给对应的同事。

2.5. 示例场景的具体实现

在本示例中,程序员小明需要向代购人员购买礼物,因此,首先我们需要创建一个“LoveMediator”中介者对象。创建Buyer对象并将中介者对象注入到Buyer对象中。我们还需要创建一个Supplier对象,并将中介者对象注入到Supplier对象中。

在运行之后,我们可以看到,在购买礼物的过程中,程序员和代购之间的消息实时传递,并且双方都能够收到对方的消息。

Mediator mediator = new LoveMediator();
Buyer buyer = new Buyer(mediator);
Supplier supplier = new Supplier(mediator);

mediator.SetBuyer(buyer);
mediator.SetSupplier(supplier);

buyer.Send("I want to buy a gift for my girlfriend.");
supplier.Send("Coupon Available");

2.6. 示例场景的变化

现在,由于折扣优惠活动已经结束,所以我们需要修改“LoveMediator”类,并修改Notify方法,当消息为“Discount Ended”时,通知程序员和代购都需要结束购买操作。修改后的代码如下所示:

class LoveMediator : Mediator
{
    private Buyer _buyer;
    private Supplier _supplier;

    public override void SetBuyer(Buyer buyer)
    {
        this._buyer = buyer;
    }

    public override void SetSupplier(Supplier supplier)
    {
        this._supplier = supplier;
    }

    public override void Notify(string message)
    {
        if (message == "Discount Ended")
        {
            _buyer.Receive(message);
            _supplier.Receive(message);
        }
        else if (message == "Coupon Available")
        {
            _supplier.Receive(message);
        }
        else
        {
            _buyer.Receive(message);
        }
    }
}

在上述也中,我们修改了Notify方法,并增加了一个判断,如果消息为“Discount Ended”,则代表折扣优惠活动已经结束,所有的购买操作需要结束。同时,我们还需要修改Buyer和Supplier类,在Receive方法中增加一个判断,如果收到“Discount Ended”消息,则需要结束购买操作。

public override void Receive(string message)
{
    if (message == "Discount Ended")
    {
        Console.WriteLine("Buyer received message (end): " + message);
        return;
    }

    Console.WriteLine("Buyer received message: " + message);
}

现在,我们再次运行示例代码:

Mediator mediator = new LoveMediator();
Buyer buyer = new Buyer(mediator);
Supplier supplier = new Supplier(mediator);

mediator.SetBuyer(buyer);
mediator.SetSupplier(supplier);

buyer.Send("I want to buy a gift for my girlfriend.");
supplier.Send("Coupon Available");

supplier.Send("Discount Ended");

当程序员和代购收到“Discount Ended”消息时,购买操作就会结束。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#设计模式之Mediator中介者模式解决程序员的七夕缘分问题示例 - Python技术站

(0)
上一篇 2023年5月31日
下一篇 2023年5月31日

相关文章

  • 未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序报错的解决办法

    当在本地计算机上使用Microsoft Office相关库时,可能会出现“未在本地计算机上注册microsoft.ACE.oledb.12.0”提供程序的报错。这是由于缺少相关的驱动程序或者未安装相应的软件所导致的。下面是解决该问题的完整攻略。 1. 确认公司计算机已安装“Microsoft Access Database Engine” “Microsof…

    C# 2023年5月15日
    00
  • React实现全局组件的Toast轻提示效果

    以下是“React实现全局组件的Toast轻提示效果”的完整攻略,包括什么是Toast轻提示、如何实现全局组件的Toast轻提示效果以及两个示例。 什么是Toast轻提示? Toast轻提示是一种常见的用户界面元素,用于在屏幕上显示短暂的消息或通知。Toast轻提示通常以半透明的方式出现在屏幕的底部或中心位置,显示一条简短的文本消息,然后在几秒钟后自动消失。…

    C# 2023年5月15日
    00
  • Unity InputFiled TMP属性和各种监听示例详解

    Unity InputField TMP属性和各种监听示例详解 什么是InputField? InputField是Unity中的一个UI控件,它可以让用户在UI界面中输入文本。InputField通常结合TextMeshPro(简称TMP)组件使用,用于控制文本的显示。InputField有丰富的属性和事件可以掌控,本文将详细解析。 InputField常…

    C# 2023年6月3日
    00
  • ASP.Net Core3.0中使用JWT认证的实现

    ASP.NET Core 3.0中使用JWT认证的实现攻略如下: 安装必要的NuGet包 在开始之前,需要安装以下NuGet包: Microsoft.AspNetCore.Authentication.JwtBearer System.IdentityModel.Tokens.Jwt 您可以使用以下命令在命令行中安装这些NuGet包: dotnet add …

    C# 2023年5月16日
    00
  • C# 检索不区分大小写并高亮显示实例详解

    在C#中,我们可以使用正则表达式来实现检索不区分大小写并高亮显示的功能。以下是实现该功能的步骤: 步骤1:引入命名空间 using System.Text.RegularExpressions; 在上面的示例中,我们引入了System.Text.RegularExpressions命名空间,该命名空间包含了正则表达式相关的类和方法。 步骤2:编写检索代码 s…

    C# 2023年5月15日
    00
  • C#实现生成mac地址与IP地址注册码的两种方法

    C#实现生成mac地址与IP地址注册码的两种方法 概述 在软件开发中,为了保护商业机密或者对软件的使用进行限制,我们经常需要生成一些注册码,然后用户需要通过这些注册码来激活软件。而在生成注册码的过程中,我们常常需要用到设备的mac地址或者IP地址。话不多说,本篇文章就来详细讲解如何使用C#实现生成mac地址与IP地址注册码的两种方法。 方法一:使用Syste…

    C# 2023年5月31日
    00
  • C#中ArrayList 类的使用详解

    C#中ArrayList 类的使用详解 在C#语言中,ArrayList类是一个非常重要的类,它允许我们在一个集合中存储对象数组。ArrayList类在.NET Framework中作为一个动态数组使用,这就意味着可以在运行时自由地增加或者减少数组的大小,而且类型也是可以变化的。下面我们来详细分析ArrayList类的使用方法。 初始化ArrayList类 …

    C# 2023年6月3日
    00
  • C#判断文件路径是否存在或者判断文件是否存在的方法

    C#中判断文件路径是否存在或者判断文件是否存在的方法,可以通过以下两种方式实现: 判断文件路径是否存在 if(Directory.Exists("D:\\exampleFolder")){ Console.WriteLine("文件夹存在"); }else{ Console.WriteLine("文件夹不存在…

    C# 2023年6月1日
    00
合作推广
合作推广
分享本页
返回顶部