中介者模式

以推送消息为例:

  • UML图:

中介者模式_第1张图片

  • 代码实现:
 public abstract class BaseMessager
    {
        public string Name { get; set; }

        public abstract void SendMessage(string message, BaseMessager messageTo);

        public abstract void GetMessage(string message, BaseMessager messageFrom);
    }

/// 
    /// 管理员推送消息
    /// 
    public class MasterMessager : BaseMessager
    {
        public override void GetMessage(string message, BaseMessager messageFrom)
        {
            Console.WriteLine("{0}管理员get{1}:{2}", base.Name, messageFrom.Name, message);
        }

        public override void SendMessage(string message, BaseMessager messageTo)
        {
            Console.WriteLine("{0}管理员to {1}:{2}", base.Name, messageTo.Name, message);
            messageTo.GetMessage(message, this);
        }
    }

/// 
    /// 普通用户推送消息
    /// 
    public class UserMessager : BaseMessager
    {
        public override void GetMessage(string message, BaseMessager messageFrom)
        {
            Console.WriteLine("{0}用户get{1}:{2}", base.Name, messageFrom.Name, message);
        }

        public override void SendMessage(string message, BaseMessager messageTo)
        {
            Console.WriteLine("{0}用户to {1}:{2}", base.Name, messageTo.Name, message);
            messageTo.GetMessage(message, this);
        }
    }

/// 
    /// 系统推送消息
    /// 
    public class SystemMessager : BaseMessager
    {
        public override void GetMessage(string message, BaseMessager messageFrom)
        {
            Console.WriteLine("系统无需接受信息");
        }

        public override void SendMessage(string message, BaseMessager messageTo)
        {
            Console.WriteLine("{0}系统to {1}:{2}", base.Name, messageTo.Name, message);
            messageTo.GetMessage(message, this);
        }
    }
   public class Mediator
    {
        private List _messagers = new List();

        /// 
        /// 加入人员
        /// 
        /// 人员
        public void AddMessager(BaseMessager baseMessager)
        {
            this._messagers.Add(baseMessager);
        }

        /// 
        /// 发送消息
        /// 
        /// 消息内容
        /// 发送消息的人
        public void SendMessage(string message, BaseMessager messgaeFrom)
        {
            Console.WriteLine("{0}Send:{1}", messgaeFrom.Name, message);
            foreach (var item in this._messagers)
            {
                if (item.Name == messgaeFrom.Name)
                {
                    continue;
                }
                item.GetMessage(message, messgaeFrom);
            }
        }
    }
  • 调用端代码:
class Program
    {
        static void Main(string[] args)
        {
            var _mediator = new Mediator();
            var master = new MasterMessager
            {
                Name = "管理员A"
            };

            var aiSystem = new SystemMessager
            {
                Name = "AI系统"
            };

            var zs_User = new UserMessager
            {
                Name = "张三"
            };

            var ls_User = new UserMessager
            {
                Name = "李四"
            };

            _mediator.AddMessager(master);
            _mediator.AddMessager(aiSystem);
            _mediator.AddMessager(zs_User);
            _mediator.AddMessager(ls_User);

            Console.WriteLine("**********************************员工发送消息*******************************************");
            _mediator.SendMessage("我的电脑有问题", zs_User);
            Console.WriteLine("\r\n");

            Console.WriteLine("**********************************管理员发送消息*******************************************");
            _mediator.SendMessage("请大家及时杀毒", master);
            Console.WriteLine("\r\n");

            Console.WriteLine("**********************************系统发送消息*******************************************");
            _mediator.SendMessage("系统发送故障,请稍后", aiSystem);
           

            Console.ReadLine();
        }
    }
  • 运行效果:

中介者模式_第2张图片

  • 总结

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

代码下载地址:https://pan.baidu.com/s/17kPl1TeE1RRpjSoL2Yi4pA    5o5w

你可能感兴趣的:(设计模式,设计模式)