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日

相关文章

  • 浅谈ASP.NETCore统一处理404错误都有哪些方式

    ASP.NET Core统一处理404错误的方式有多种,本文将详细讲解这些方式,包括实现过程、示例说明等。 方式一:使用中间件处理404错误 ASP.NET Core提供了中间件来处理404错误。我们可以在Startup.cs文件中添加以下代码: public void Configure(IApplicationBuilder app, IWebHostE…

    C# 2023年5月16日
    00
  • c# FTP上传文件实例代码(简易版)

    下面是针对“c# FTP上传文件实例代码(简易版)”这篇文章的详细讲解攻略。 1. 什么是FTP上传? FTP(文件传输协议)是一种用来在网络上传递文件的协议。FTP上传即是将本地文件通过FTP协议上传到远程FTP服务器,从而实现将文件在不同计算机之间进行传输的目的。 2. c# FTP上传文件实例代码说明 2.1 前置条件 在进行c# FTP上传文件前,需…

    C# 2023年5月31日
    00
  • php实现JWT(json web token)鉴权实例详解

    PHP实现JWT(JSON Web Token)鉴权实例详解 什么是JWT? JWT是一种用于身份验证和授权的开放标准(RFC 7519),它定义了一种紧凑且自包含的方式来在各方之间安全地传输信息。JWT通常由三部分组成:头部、载荷和签名。头部包含了令牌的元数据,载荷包含了令牌的主要信息,签名用于验证令牌的真实性。 JWT的优点 简单:JWT是一种轻量级的标…

    C# 2023年5月17日
    00
  • C#实现定时关机小应用

    针对” C#实现定时关机小应用”,我们可以使用System.Diagnostics 命名空间中的Process类来实现。 首先,我们需要一个定时器来控制时间: using System.Windows.Forms; using System.Diagnostics; namespace ShutdownApp { public partial class M…

    C# 2023年6月1日
    00
  • 在.net core中实现字段和属性注入的示例代码

    在.NET Core中,我们可以使用依赖注入的方式将依赖关系注入到对象中,包括字段和属性注入。以下是在.NET Core中实现字段和属性注入的示例代码的攻略。 1. 创建一个接口 首先,我们需要定义一个接口,它将被注入到我们的类中。此处示例中,我们创建了一个名为 ILogger 的接口,用于记录日志。 public interface ILogger { v…

    C# 2023年5月31日
    00
  • .Net MVC将Controller数据传递到View

    在.Net MVC中,Controller通过Model来向View传递数据,Model通常是一个类,保存着Controller需要向View传递的数据,在Controller中创建Model,将需要传递的数据赋值给Model,再将Model传递给View。 下面我们来详细阐述“.Net MVC将Controller数据传递到View”的完整攻略: 在Con…

    C# 2023年5月31日
    00
  • C#中Span相关的性能优化建议

    标题:C#中Span相关的性能优化建议 简介 Span是C#中新增的一种类型,它能够提升数组和字符串的性能表现。下面将给出几个优化建议,帮助开发者正确使用Span。 优化建议 使用Span替换数组 数组是一种引用类型,存放在堆中,而且会由垃圾回收器回收。这个过程比较耗时,所以使用数组可能会降低程序的性能。使用Span可以很好地解决这个问题。 示例: // 使…

    C# 2023年6月8日
    00
  • ASP.NET Core依赖注入系列教程之服务的注册与提供

    ASP.NET Core依赖注入系列教程之服务的注册与提供攻略 在ASP.NET Core应用程序中,依赖注入是一种常用的设计模式,用于管理应用程序中的对象和服务。本攻略将介绍如何在ASP.NET Core应用程序中注册和提供服务。 步骤 以下是注册和提供服务的步骤: 创建服务类。 创建一个服务类,该类将提供应用程序所需的服务。例如: public inte…

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