• 设计模式之中介者模式


    一、概念

    • 中介者模式是用来降低多个对象和类之间的通信复杂性。这种模式提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护。

    二、场景

    • 系统中对象之间存在比较复杂的引用关系,导致它们之间的依赖关系结构混乱而且难以复用该对象。
    • 想通过一个中间类来封装多个类中的行为,而又不想生成太多的子类。

    三、实现

    • 条件
      • C#
    • 场景
      • 以乘客打车下订单为例,司机接收订单后,需要告知其他抢单的司机为场景实现中介者设计模式。
    • 代码实现
      • 新建A司机类,类名:ADriver
            using System;
            using System.Collections.Generic;
            using System.Text;
            
            namespace MediatorPattern
            {
                public class ADriver : AbstractCompany, IDriver
                { 
                    public void Receive()
                    {
                        Console.WriteLine("ADriver:接收到信息");
                    }
            
                    public void Send()
                    {
                        dCompany.Sender();
                    }
                }
            } 
        
      • 新建B司机类,类名:BDriver
            using System;
            using System.Collections.Generic;
            using System.Text;
            
            namespace MediatorPattern
            {
                public class BDriver : AbstractCompany, IDriver
                { 
                    public void Receive()
                    {
                        Console.WriteLine("BDriver:接收到消息");
                    }
            
                    public void Send()
                    {
                        dCompany.Sender();
                    }
                }
            }    
        
      • 新家司机接口类,类名:IDriver
            using System;
            using System.Collections.Generic;
            using System.Text;
            
            namespace MediatorPattern
            {
                public  interface IDriver
                {
                    void Send();
                    void Receive();
                }
            }    
        
      • 新建公司抽象类,类名:AbstractCompany
            using System;
            using System.Collections.Generic;
            using System.Text;
            
            namespace MediatorPattern
            {
                public abstract class AbstractCompany
                {
                   public  DDCompany dCompany { get; set; }
                }
            } 
        
      • 新建公司实现类,类名:
            using System;
            using System.Collections.Generic;
            using System.Text;
            
            namespace MediatorPattern
            {
                public class DDCompany
                {
                    private List list = new List();
                    public void Add(IDriver driver) 
                    {
                        list.Add(driver);
                    }
                    public void Sender() 
                    {
                        list.ForEach(d => {
                            d.Receive();
                        });
                    }
                }
            }    
        
      • 入口函数类,类名:
            using System;
            
            namespace MediatorPattern
            {
                internal class Program
                {
                    static void Main(string[] args)
                    {
                        ADriver aDriver = new ADriver();
                        BDriver bDriver = new BDriver();
            
                        DDCompany dDCompany = new DDCompany();
                        dDCompany.Add(bDriver);
                        aDriver.dCompany = dDCompany;
                        aDriver.Send();
                    }
                }
            } 
        

    四、优缺点

    • 优点
      • 降低了类的复杂度,将一对多转化成了一对一。
      • 各个类之间的解耦。
      • 符合迪米特原则。
    • 缺点
      • 中介者会庞大,变得复杂难以维护。
  • 相关阅读:
    [pmayavi][python]mayavi所有whl文件下载地址汇总
    java稀疏数组(含稀疏数组代码展示)
    HTB靶场之Sandworm
    【云原生】Kubernetes 有状态应用程序控制器 Operator
    彻底理解线程
    来此加密证书申请,验证,自动部署
    nodejs+vue衣服穿搭推荐系统-计算机毕业设计
    Qt之进程通信-QProcess(含源码+注释)
    (二)小程序学习笔记——初识:标签、数据绑定、指令介绍
    R语言安装及基础知识
  • 原文地址:https://blog.csdn.net/Fu_Shi_rong/article/details/127097930