【C#】Behavioral Patterns Mediator Mode

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


<<:  Base64 转 ArrayBuffer 效率小记

>>:  【C#】Structural Patterns Flyweight Mode

[Day20]-程序除错与异常处理

程序异常 除数为0的错误 异常处理程序try except 档案不存在的错误FileNotFoun...

从 IT 技术面细说 Search Console 的 27 组数字 KPI (6) :网页

记得在日本的一本 SEO 书写了一个很生动的范例,一间公司业绩要成长,取决於业务员的数量,而网站的...

Day 26 - Stripe Follow Along Dropdown Navigation [更新]

前言 JS 30 是由加拿大的全端工程师 Wes Bos 免费提供的 JavaScript 简单应用...

Android学习笔记07

coroutines 在用使用java写android的时候,我们要连接api的时候大多使用rxja...

Day 07 | 互动事件

互动事件顾名思义,就是前後端之间的互动啦!现在要从页面上触发後端的 Function 不用在自己写 ...