CSharp: Mediator Pattern in donet core 6
/// <summary>
/// 中介者模式 Mediator Pattern 亦称: 调解人、控制器、Intermediary、Controller、Mediator
/// </summary>
public abstract class User
{
/// <summary>
///
/// </summary>
protected IGroupChatMediator? _mediator;
/// <summary>
///
/// </summary>
protected string _name;
/// <summary>
///
/// </summary>
/// <param name="name"></param>
protected User(string name)
{
_name = name;
}
/// <summary>
///
/// </summary>
public string Name => _name;
/// <summary>
///
/// </summary>
/// <param name="mediator"></param>
public void SetMediator(IGroupChatMediator mediator) => _mediator = mediator;
/// <summary>
///
/// </summary>
/// <param name="message"></param>
public abstract void Send(string message);
/// <summary>
///
/// </summary>
/// <param name="message"></param>
public abstract void Receive(string message);
/// <summary>
///
/// </summary>
/// <returns></returns>
public override string ToString()
{
return $"姓名:{Name}";
}
}
using Geovin.Du.DuMediator.GroupChat.Components.Common;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Linq;
namespace Geovin.Du.DuMediator.GroupChat.Components
{
/// <summary>
/// 中介者模式 Mediator Pattern 亦称: 调解人、控制器、Intermediary、Controller、Mediator
/// </summary>
public class ViberUser : User
{
public ViberUser(string name)
: base(name)
{
}
public override void Receive(string message) =>
Console.WriteLine($"{_name} 收到的信息: '{message}'");
public override void Send(string message)
{
if (_mediator == null)
{
return;
}
Console.WriteLine($"{_name} 发出的信息: '{message}' 给团队");
_mediator.SendMessage(message, this);
}
}
}
/// <summary>
/// 中介者模式 Mediator Pattern 亦称: 调解人、控制器、Intermediary、Controller、Mediator
/// </summary>
public interface IGroupChatMediator
{
/// <summary>
///
/// </summary>
/// <param name="user"></param>
void AddParticipant(User user);
/// <summary>
///
/// </summary>
/// <param name="message"></param>
/// <param name="sender"></param>
void SendMessage(string message, User sender);
}
/// <summary>
/// 中介者模式 Mediator Pattern 亦称: 调解人、控制器、Intermediary、Controller、Mediator
/// </summary>
public class ViberGroupChatMediator : IGroupChatMediator
{
/// <summary>
///
/// </summary>
private readonly List<User> _chatParticipants = new();
/// <summary>
///
/// </summary>
/// <param name="users"></param>
public ViberGroupChatMediator(params User[] users)
{
foreach (var user in users)
{
AddParticipant(user);
}
Console.WriteLine();
}
/// <summary>
///
/// </summary>
/// <param name="user"></param>
public void AddParticipant(User user)
{
Console.WriteLine($"{user.Name} 是新的聊天参与者.");
_chatParticipants.Add(user);
user.SetMediator(this);
}
/// <summary>
///
/// </summary>
/// <param name="message"></param>
/// <param name="sender"></param>
public void SendMessage(string message, User sender)
{
foreach (var user in _chatParticipants.Where(user => user != sender))
{
user.Receive(message);
}
}
}
调用:
Geovin.Du.DuMediator.GroupChat.GroupChatExecutor.Execute();
输出:
中介者模式 Mediator Pattern:Group chat demo -------------------------------------------------- 马三 是新的聊天参与者. 张四 是新的聊天参与者. 王五 是新的聊天参与者. 马三 发出的信息: '有人在吗?' 给团队 张四 收到的信息: '有人在吗?' 王五 收到的信息: '有人在吗?' 安琪 是新的聊天参与者. 王五 发出的信息: '我们在.' 给团队 马三 收到的信息: '我们在.' 张四 收到的信息: '我们在.' 安琪 收到的信息: '我们在.'
哲学管理(学)人生, 文学艺术生活, 自动(计算机学)物理(学)工作, 生物(学)化学逆境, 历史(学)测绘(学)时间, 经济(学)数学金钱(理财), 心理(学)医学情绪, 诗词美容情感, 美学建筑(学)家园, 解构建构(分析)整合学习, 智商情商(IQ、EQ)运筹(学)生存.---Geovin Du(涂聚文)
浙公网安备 33010602011771号