中介者模式

定义:用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。

个人理解:各个类之间的通信不是直接进行,而是通过一个中间者来转发,那么就要求中间者了解所有的类,类中要有中间者,这样类和类之间就可以不用直接关联了。

1、中间者和要通信的类的抽象类

复制代码
 1 //Mediator类 抽象中介者类,定义一个抽象的发送信息方法,得到同事对象和发送信息
 2     abstract class Mediator
 3     {
 4         public abstract void Send(string message,Person person);
 5     }
 6 
 7     //Person类,在构者该对象时要得到中介者
 8     abstract class Person
 9     {
10        public Mediator mediator;
11         public Person(Mediator mediator)
12         {
13             this.mediator = mediator;
14         }
15     }
View Code
复制代码

2、具体的中介者类

复制代码
 1  //具体的中介者
 2     class ConcreteMediator : Mediator
 3     {
 4         //要了解所有需要通过中介者传达信息的人
 5         public ConcretePersonOne personOne { get; set; }
 6         public ConcretePersonTwo personTwo { get; set; }
 7 
 8         public override void Send(string message, Person person)
 9         {
10             //如果发送信息的人是第一个人,则第二个人接收信息,否则第一个人接收信息
11             if (person == personOne)
12             {
13                 personTwo.Notify(message);
14             }
15             else
16             {
17                 personOne.Notify(message);
18             }
19         }
20     }
View Code
复制代码

3、具体的人类

复制代码
 1  //具体的人类
 2     class ConcretePersonOne : Person
 3     { 
 4        //父构造函数需要参数Mediator
 5         public ConcretePersonOne(Mediator mediator) : base(mediator) { }
 6 
 7         //发送信息的方法,其实就是通过中介者发送的
 8         public void Send(string message)
 9         {
10             mediator.Send(message,this);
11         }
12 
13         //接收信息的方法
14         public void Notify(string message)
15         {
16             Console.WriteLine("我是第一类人,我收到了信息:" + message);
17         }
18 
19     }
20 
21     class ConcretePersonTwo : Person
22     {
23         public ConcretePersonTwo(Mediator mediator) : base(mediator) { }
24 
25         public void Send(string message)
26         {
27             mediator.Send(message,this);
28         }
29 
30         public void Notify(string message)
31         {
32             Console.WriteLine("我是第二类人,我收到信息:" + message);
33         }
34     }
View Code
复制代码

4、客户端

复制代码
static void Main(string[] args)
        {
            //创建一个中间者
            ConcreteMediator cm = new ConcreteMediator();

            //创建两类要通信的人
            ConcretePersonOne p1 = new ConcretePersonOne(cm);
            ConcretePersonTwo p2 = new ConcretePersonTwo(cm);

            //向中介者中加入要通信的人
            cm.personOne = p1;
            cm.personTwo = p2;

            //p1和p2要发信息
            p1.Send("I love you");
            p2.Send("I love you too");

            Console.Read();

        }
View Code
复制代码

 

posted @   爱生活,爱代码  阅读(145)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示