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

yizhihongxing

我们来详细讲解一下“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日

相关文章

  • C#移除字符串中的不可见Unicode字符 案例代码

    C#移除字符串中的不可见Unicode字符的完整攻略如下: 问题背景 在开发中,有时候字符串中可能会包含非常规的字符,例如不可见的Unicode字符。这些字符虽然不会影响字符串的显示,但会影响字符串的处理和运算。因此,需要移除字符串中的这些非常规字符,以便更好地进行后续的操作。 解决方案 我们可以通过正则表达式来匹配和替换字符串中的非常规字符。具体实现步骤如…

    C# 2023年5月31日
    00
  • log4net配置和使用方法分享

    下面是“log4net配置和使用方法分享”的完整攻略。 1. 简介 log4net是一个强大的.NET日志记录库,它允许您记录到多个输出目标,包括文件、控制台、数据库、电子邮件和其他自定义输出目标。log4net是Apache Software Foundation的一个项目,它和另一个流行的Java日志记录库log4j很相似。在本文中,我们将学习如何配置和…

    C# 2023年5月31日
    00
  • C#实现简单计算器功能

    C#实现简单计算器功能的攻略如下: 步骤一:设计用户界面 首先,我们需要设计一个用户界面,提供给用户输入数据和操作符的地方,并在可视化界面上展示所得结果。为此,我们可以使用Visual Studio自带的Windows Forms应用程序快捷模板。打开Visual Studio,新建Windows Forms应用程序,然后在“工具箱”中选取TextBox、B…

    C# 2023年6月7日
    00
  • C#关于System.Collections空间详解

    C#关于System.Collections空间详解 简介 System.Collections是一个命名空间,包含一组接口和类,用于定义集合的通用构造和算法。System.Collections是C#内置的原生集合框架,相当于Java中的集合类库。在C#中,强烈推荐使用System.Collections,而不是手动编写集合算法。 术语 在学习System…

    C# 2023年5月31日
    00
  • c# Base64编码和图片的互相转换代码

    下面是关于“c# Base64编码和图片的互相转换代码”的完整攻略: Base64编码 Base64编码是将二进制数据通过64个可打印字符来表示的一种编码方式。在C#中,我们可以使用Convert.ToBase64String()方法将一个byte数组进行Base64编码,方法原型如下: public static string ToBase64String…

    C# 2023年6月3日
    00
  • C#实现矩阵转置的方法

    C#实现矩阵转置的方法 什么是矩阵转置 矩阵转置是指将矩阵的行列交换得到一种新的矩阵,原矩阵的行变成转置后矩阵的列,原矩阵的列变成转置后矩阵的行。需要注意的是,转置后的新矩阵的行列数与原矩阵相反。 C#实现矩阵转置的方法 C#中可以使用二维数组来表示矩阵,矩阵转置的过程其实就是对原数组的行列进行交换,下面是C#实现矩阵转置的简单代码示例: int[,] ma…

    C# 2023年6月7日
    00
  • C# 委托(delegate) 的小例子

    下面是我对 “C# 委托(delegate) 的小例子”的详细讲解攻略。 1.什么是委托(delegate) 在C#中,“委托(delegate)”是一个类,它允许我们将方法作为参数传递,然后在一个地方调用任意方法。委托可以认为是函数指针,它指向一个或多个方法。委托的实例在调用时会调用一个方法。 2.如何定义委托 定义委托需要使用delegate关键字,一个…

    C# 2023年6月7日
    00
  • 在 asp.net core 的中间件中返回具体的页面的实现方法

    在 ASP.NET Core 中,中间件是处理 HTTP 请求和响应的组件,可以是任何处理这些请求和响应的代码。在中间件中返回具体的页面,通常需要借助于 ASP.NET Core MVC 中的视图引擎和控制器。下面是具体的实现方法。 步骤1:添加 MVC 中间件服务 首先,需要在 ASP.NET Core 应用程序中添加 MVC 中间件服务。在 Startu…

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