• 中介者模式


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

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

    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
  • 相关阅读:
    java实现Floyd算法
    java实现Floyd算法
    java实现Floyd算法
    java实现Floyd算法
    java实现Dijkstra算法
    java实现Dijkstra算法
    java实现Dijkstra算法
    java实现Dijkstra算法
    java实现Dijkstra算法
    QTableWidget简单应用之文件浏览器
  • 原文地址:https://www.cnblogs.com/zhengwei-cq/p/7090041.html
Copyright © 2020-2023  润新知