? 作者简介,愚公搬代码 ?《头衔》:华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,阿里云专家博主,腾讯云优秀博主,掘金优秀博主,51CTO博客专家等。 ?《近期荣誉》:2022年CSDN博客之星TOP2,2022年华为云十佳博主等。
?《博客内容》:.NET、Java、Python、Go、Node、前端、IOS、Android、鸿蒙、Linux、物联网、网络安全、大数据、人工智能、U3D游戏、小程序等相关领域知识。
??欢迎 ?点赞?评论?收藏
设计模式(Design Pattern)是软件开发领域的宝贵经验,是多人反复借鉴和广泛应用的代码设计指导。它们是一系列经过分类和归纳的代码组织方法,旨在实现可重用性、可维护性和可理解性。使用设计模式,我们能够编写高质量的代码,使其更易于他人理解,并提供了代码可靠性的保证。
毫无疑问,设计模式对个人、团队和整个系统都带来了显著的益处。它们将代码开发提升到工程化水平,为软件工程构建提供了坚实的基础,就如同大厦的一块块精巧的砖石一样。在项目中明智地应用设计模式可以完美地解决各种复杂问题。每种设计模式都有相应的原理和最佳实践,它们描述了我们日常开发中不断遇到的问题,以及这些问题的核心解决方法。正是因为这种实用性和通用性,设计模式才能在软件开发中广泛地得以应用。设计模式是构建稳健、可扩展和可维护软件的关键工具,为开发者们提供了解决问题的智慧和指导。
中介者模式是一种行为型设计模式,它用于管理一组对象之间的相互作用,以实现对象之间的解耦。在这种模式下,多个对象不需要直接相互通信,而是通过一个中介者对象来协调它们之间的交互。
当一组对象需要进行复杂的相互协作时,中介者模式可以帮助降低系统的复杂性和耦合度。它的主要目标是确保对象之间的通信不会导致紧密耦合,从而使系统更加灵活、可维护和可扩展。
当某些对象之间的相互作用需要发生改变时,中介者模式可以轻松应对这种变化,而不需要修改每个对象的代码。这意味着中介者模式有助于保持系统的稳定性,并支持适应变化。
中介者模式是一种有助于管理对象之间复杂交互的设计模式,通过引入中介者对象,可以实现对象之间的松散耦合,提高系统的可维护性和可扩展性。这种模式在需要协调多个对象之间的场景下非常有用。
解释器模式(Interpreter Pattern)和中介者模式(Mediator Pattern)是两种不同的设计模式,它们具有不同的概念和作用。让我们分别解释它们:
解释器模式主要用于解释语言表达式,将问题分解成表达式并解释执行;中介者模式用于管理对象之间的相互作用,协调对象之间的通信以减少耦合度。虽然它们都涉及对象之间的交互,但它们的核心概念和作用是不
在解释器模式(Interpreter Pattern)中,并没有一个特定的"具体中介者(Concrete Mediator)"角色。中介者模式和解释器模式是两种不同的设计模式,它们解决的问题和角色有所不同。
中介者模式(Mediator Pattern)的核心概念是引入一个中介者对象,用于协调一组对象之间的相互作用,以降低这些对象之间的耦合度。中介者模式通常包括中介者角色(Mediator)和同事对象角色(Colleague)。
解释器模式(Interpreter Pattern)是一种行为型设计模式,用于定义语言的文法规则,并且可以解释该语言中的表达式。在解释器模式中,通常有终结符表达式(Terminal Expression)和非终结符表达式(Non-terminal Expression)等角色,用于表示语言中的表达式和规则。
这两种模式有不同的用途和关注点,因此没有一个称为"具体中介者(Concrete Mediator)"的角色出现在解释器模式中。如果你需要详细了解解释器模式或中介者模式的相关角色和用法,我可以为你提供更多信息。
在解释器模式(Interpreter Pattern)中,并没有抽象同事类(Abstract Colleague)的概念。中介者模式(Mediator Pattern)中有同事对象(Colleague)角色,但在解释器模式中并不涉及这个概念。
解释器模式主要包括以下关键角色:
interpret
方法,用于解释表达式。解释器模式的核心思想是将一个问题分解成一系列的表达式,并为每个表达式创建对应的解释器,然后通过组合这些解释器来解决问题。它主要用于定义一种语言的语法规则,并解释和执行该语言中的表达式。
解释器模式(Interpreter Pattern)通常不包括具体同事类(Concrete Colleague)的概念。具体同事类是中介者模式(Mediator Pattern)中的角色,而不是解释器模式中的角色。
在中介者模式中,具体同事类是系统中需要协作的多个对象,它们通过中介者对象来进行通信和协调。这些具体同事类通常实现一个共同的接口,并且持有一个对中介者对象的引用。中介者对象负责处理具体同事类之间的交互,以减少对象之间的直接依赖关系,从而提高系统的灵活性和可维护性。
在解释器模式中,主要包括以下角色:
interpret
方法,用于解释表达式。解释器模式主要用于定义一种语言的语法规则,并解释和执行该语言中的表达式,不涉及具体同事类的概念。具体同事类是中介者模式中的概念,用于协作的多个对象之间的通信和协调。如果您需要了解更多关于中介者模式或其他设计模式的信息,请随时提问。
命名空间MediatorPattern中包含抽象用户类User充当同事基类,它有2个实现类,普通用户GeneralUser类和VIP用户VipUser类,聊天室ChatRoom类充当中介者基类,新浪聊天室SinaChat类为具体中介者。本案例尝试使用中介者模式实现应用最为广泛的网络聊天室。
public abstract class User {
public string Name { get; private set; }
protected User(string name) {
Name = name;
}
public abstract void OnRecieve(User sender, string message, bool group = false);
}
抽象用户类User,内部仅维持一个姓名,OnRecieve方法定义在收到其他用户的信息时的回调。此处必须使用public公开OnRecieve方法,因为在聊天室中需要调用它。
public class GeneralUser : User {
public GeneralUser(string name) : base(name) {
}
public override void OnRecieve(User sender, string message, bool group = false) {
var groupFlag = group ? "group" : "private";
Console.WriteLine(
$"{this.IdentitySign()} recieved a {groupFlag} message from " +
$"{sender.IdentitySign()},{Environment.NewLine}(s)he says:{message}");
}
}
普通用户类GeneralUser,继承自User并实现OnRecieve方法。
public class VipUser : User {
public VipUser(string name) : base(name) {
}
public override void OnRecieve(User sender, string message, bool group = false) {
var groupFlag = group ? "group" : "private";
Console.WriteLine(
$"{this.IdentitySign()} recieved a {groupFlag} message from " +
$"{sender.IdentitySign()},{Environment.NewLine}(s)he says:{message}");
}
}
Vip用户类VipUser,继承自User并实现OnRecieve方法。实际开发过程中可不定义2个实现类,使用属性标识是否是Vip用户即可。
public abstract class ChatRoom {
protected List<User> _users = null;
protected const string SPLIT_BREAK =
"------------------------------------------------------";
protected ChatRoom() {
_users = new List<User>();
}
public void Attach(User user) {
if (user == null) throw new ArgumentNullException();
_users.Add(user);
}
public bool Detach(User user) {
if (user == null) throw new ArgumentNullException();
return _users.Remove(user);
}
public abstract void Talk2All(User sender, string message);
public abstract void Talk2User(User sender, User reciever, string message);
}
聊天室基类ChatRoom,需要维持对User列表的引用并包含添加和删除方法,包含2个主要方法,对所有人说话Talk2All和对某人说话Talk2User。
public class SinaChat : ChatRoom {
public override void Talk2All(User sender, string message) {
_users.Where(u => u.Name != sender.Name)
.ToList()
.ForEach((u) => u.OnRecieve(sender, message, true));
Console.WriteLine(SPLIT_BREAK);
}
public override void Talk2User(User sender, User reciever, string message) {
var user = _users.Where(u => u.Name == reciever.Name)
.FirstOrDefault();
user.OnRecieve(sender, message);
Console.WriteLine(SPLIT_BREAK);
}
}
具体聊天室,实现对所有人说话Talk2All和对某人说话Talk2User方法。
public static class Extentions {
public static string IdentitySign(this User user) {
if (user is VipUser) {
return $"{user.Name}[VIP]";
}
else if (user is GeneralUser) {
return $"{user.Name}";
}
return string.Empty;
}
}
定义了一个扩展以方便展示用户Vip标识。
public class Program {
private static ChatRoom _chatRoom;
public static void Main(string[] args) {
_chatRoom = new SinaChat();
var juice = new GeneralUser("Juice");
var cola = new GeneralUser("Cola");
var iori = new VipUser("Iori");
var marin = new VipUser("Marin");
_chatRoom.Attach(juice);
_chatRoom.Attach(cola);
_chatRoom.Attach(iori);
_chatRoom.Attach(marin);
_chatRoom.Talk2All(juice, "Hello Every one!");
_chatRoom.Talk2User(cola, iori, "Hello Iori!");
_chatRoom.Talk2User(iori, marin, "Hello Marin!");
Console.ReadKey();
}
}
以上是调用方的代码演示,以下是这个案例的输出结果:
Cola recieved a group message from Juice,
(s)he says:Hello Every one!
Iori[VIP] recieved a group message from Juice,
(s)he says:Hello Every one!
Marin[VIP] recieved a group message from Juice,
(s)he says:Hello Every one!
------------------------------------------------------
Iori[VIP] recieved a private message from Cola,
(s)he says:Hello Iori!
------------------------------------------------------
Marin[VIP] recieved a private message from Iori[VIP],
(s)he says:Hello Marin!
------------------------------------------------------
<hr style=" border:solid; width:100px; height:1px;" color=#000000 size=1">
中介者模式(Mediator Pattern)有许多优点,它被用于协调多个对象之间的通信和交互,以减少对象之间的耦合度。以下是中介者模式的一些主要优点:
中介者模式有助于提高系统的可维护性、可扩展性和灵活性,特别适用于需要多个对象协同工作的复杂系统。它可以有效地管理对象之间的关系,减少了代码中的混乱和复杂性,使系统更加清晰和
中介者模式(Mediator Pattern)虽然有许多优点,但也存在一些缺点和限制,需要在使用时考虑:
在使用中介者模式时,开发人员应仔细权衡其优点和缺点,确保它适合特定的系统和需求。中介者模式通常在需要对象之间的松散耦合和协调的情况下发挥最大的作用。
中介者模式(Mediator Pattern)适用于以下情况和场景:
中介者模式适用于需要降低对象之间耦合度、简化通信和协作、提高系统可维护性和灵活性的情况。在设计复杂的系统中,中介者模式可以帮助管理对象之间的关系,提高系统的可理解性和可扩展性。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。