设计模式之中介者模式

尽管将一个系统分割成许多对象通常可以增加其可复用性,但是对象间相互连接的激增又会降低其可复用性

大量的连接使得一个对象不可能在没有其他对象的支持下工作,系统表现为一个不可分割的整体,所以,对系统的行为进行任何较大的改动就十分困难了

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

Colleague叫做抽象同事类。

ConcreteColleague是具体抽象类,每个具体同事只知道自己的行为,而不了解其他同事类的情况,但它们却都认识中介者对象。

Mediator是抽象中介者,定义了同事对象到中介者对象的接口。

ConcreteMediator是具体中介者对象,实现抽象类的方法,它需要知道所有具体同事类,并从具体同事接收消息,向具体同事发出命令。

csharp 复制代码
 class Program
    {
        static void Main(string[] args)
        {
            //生成一个具体中介者
            ConcreteMediator m = new ConcreteMediator();

            //让两个具体同事类认识中介者
            ConcreteColleague1 c1 = new ConcreteColleague1(m);
            ConcreteColleague2 c2 = new ConcreteColleague2(m);

            //让中介者认识各个具体同事类对象
            m.Colleague1 = c1;
            m.Colleague2 = c2;

            c1.Send("你好,同事2");
            c2.Send("你也好,同事1");
            Console.ReadLine();
        }
    }

    //抽象中介类
    abstract class Mediator
    {
        public abstract void Send(string message, Colleague colleague);//定义一个抽象的发送消息方法,得到同事对象和发送消息


    }

    //具体中介类
    class ConcreteMediator : Mediator
    {
        //需要了解所有的具体同事对象
        private ConcreteColleague1 colleague1;
        private ConcreteColleague2 colleague2;

        public ConcreteColleague1 Colleague1
        {
            set { colleague1 = value; }
        }

        public ConcreteColleague2 Colleague2
        {
            set { colleague2 = value; }
        }



        public override void Send(string message, Colleague colleague)
        {
            if (colleague == colleague1)
            {
                colleague1.Notify(message);
            }
            else
            {
                colleague2.Notify(message);
            }
        }
    }

    //抽象同事类
    abstract class Colleague
    {
        protected Mediator mediator;

        public Colleague(Mediator mediator)
        {
            this.mediator = mediator;//构造方法,得到中介者对象
        }
    }


 
    //具体同事类
    class ConcreteColleague1 : Colleague
    {
        public ConcreteColleague1(Mediator mediator) : base(mediator)
        { }
        public void Send(string message)
        {
            mediator.Send(message, this);
        }
        public void Notify(string message)
        {
            Console.WriteLine("同事1得到消息:"+message);
        }

    }

    class ConcreteColleague2 : Colleague
    {
        public ConcreteColleague2(Mediator mediator) : base(mediator)
        { }
        public void Send(string message)
        {
            mediator.Send(message, this);
        }
        public void Notify(string message)
        {
            Console.WriteLine("同事2得到消息:"+message);
        }
    }
相关推荐
饮茶三千6 小时前
基于 WangEditor 的富文本编辑器定制实践
前端·vue.js·设计模式
ttod_qzstudio7 小时前
【软考设计模式】中介者模式:网状交互的解耦与集中调度精讲
设计模式·中介者模式
饼干哥哥1 天前
一夜之间,全世界的 Agent 能力提高了一个档次
设计模式·agent·代码规范
Kel1 天前
管道、IPC、Socket:你以为的三种技术,其实是同一件事
javascript·设计模式·node.js
我登哥MVP1 天前
进 Gang of Four 设计模式:建造者模式
java·设计模式·建造者模式
进击的前栈2 天前
鸿蒙实战:19 页面全景汇总与 7 大共享设计模式回顾
华为·设计模式·harmonyos
刀法如飞2 天前
Spring Boot 4.1 + JDK 25 DDD开源脚手架,面向 AI 编程
设计模式·架构·ai编程
折哥的程序人生 · 物流技术专研2 天前
第8篇:模板方法模式的优缺点与面试高频考点
java·设计模式·面试·模板方法模式·行为型模式·优缺点·扩充系列
workflower2 天前
人形机器人全身运动控制能力大幅提升
人工智能·深度学习·机器学习·设计模式·机器人·自动化
折哥的程序人生 · 物流技术专研2 天前
Java 23 种设计模式:从踩坑到精通 | 备忘录模式 —— 快照与撤销,给对象装一个“后悔药”
java·设计模式·备忘录模式·行为型模式·java设计模式·从踩坑到精通·撤销重做