The Mediator design pattern defines an object that encapsulates how a set of objects interact. Mediator promotes loose coupling by keeping objects from referring to each other explicitly, and it lets you vary their interaction independently.
简单来说~ 中介者模式封装一个类(Mediator)~ 将Mediator中的两个对像进行互动~
换句话说~ Mediator促进两个对象之间的鬆散~ 并允许使用它来改变它们两个互动方式~
学习目标: 中介者模式的概念及实务
学习难度: ☆☆☆
using System;namespace ConsoleApp1{ public abstract class Mediator //抽象中介者 { public abstract void Send(string message, Player player); //抽象发送方法(讯息、Player) } public class ConcreteMediator : Mediator //实体中介者 (让两个对象物件进行交互) { ConcretePlayer1 player1; //实体玩家1 ConcretePlayer2 player2; //实体玩家2 public ConcretePlayer1 Player1 //建构实体玩家1 { set { player1 = value; } } public ConcretePlayer2 Player2 //建构实体玩家2 { set { player2 = value; } } public override void Send(string message, Player player) //建构实体发送方法 { if (player == player1) //当player1传讯息 { player2.Notify(message); //player2收到通知 } else { player1.Notify(message); //player1收到通知 } } } public abstract class Player //抽象玩家 { protected Mediator mediator; //定义中介者 // Constructor public Player(Mediator mediator) //建构Player,让Player能有中介者的parameter { this.mediator = mediator; } } public class ConcretePlayer1 : Player //实体玩家1 { //建构实体玩家1,让它能接受mediator,然后mediator的定义继承抽象类 public ConcretePlayer1(Mediator mediator) : base(mediator) { } //建构发送讯息的实体方法 public void Send(string message) { mediator.Send(message, this); //从中介者送.. } //建构接收讯息的实体方法 public void Notify(string message) { Console.WriteLine("Player1 gets message: " + message); } } public class ConcretePlayer2 : Player //实体玩家2 { //建构实体玩家2,让它能接受mediator,然后mediator的定义继承抽象类 public ConcretePlayer2(Mediator mediator) : base(mediator) { } //建构发送讯息的实体方法 public void Send(string message) { mediator.Send(message, this); //从中介者送.. } //建构接收讯息的实体方法 public void Notify(string message) { Console.WriteLine("Player2 gets message: " + message); } } public class MainProgram { public static void Main(string[] args) { //实体化中介者 ConcreteMediator mediator = new ConcreteMediator(); //实体化player1、player2,并将中介者塞入 ConcretePlayer1 player1 = new ConcretePlayer1(mediator); ConcretePlayer2 player2 = new ConcretePlayer2(mediator); mediator.Player1 = player1; mediator.Player2 = player2; player1.Send("How are you?"); player2.Send("Fine, thanks"); } }}
参考资料:
https://www.dofactory.com/net/mediator-design-pattern