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