中介者模式

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

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

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 @ 2017-06-28 15:45  爱生活,爱代码  阅读(145)  评论(0编辑  收藏  举报