博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
中介者模式(24)[测试]
阅读量:6174 次
发布时间:2019-06-21

本文共 2791 字,大约阅读时间需要 9 分钟。

今天我们来讲一下中介者模式。

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

我们拿两个不认识的同事通过第三人打招呼这个情景,来看一下中介者模式是什么样的:

//抽象中介者类    abstract class Mediator    {        //定义一个抽象的发送消息方法,得到同时对象和发送消息        public abstract void Send(string message, Colleague colleague);    }    abstract class Colleague    {        protected Mediator mediator;        //构造方法,得到中介者对象        public Colleague(Mediator mediator)        {            this.mediator = mediator;        }    }    //具体的中介者类    class ConcreteMediator:Mediator    {        //需要了解所有的具体同事类对象        private ConcreateColleague1 colleague1;        private ConcreateColleague2 colleague2;        internal ConcreateColleague1 Colleague1        {            set            {                colleague1 = value;            }        }        internal ConcreateColleague2 Colleague2        {            set            {                colleague2 = value;            }        }        //重写发送信息的方法,根据对象做出选择判断,通知对象        public override void Send(string message, Colleague colleague)        {            if (colleague == colleague1)            {                colleague2.Notify(message);            }            else            {                colleague1.Notify(message);            }        }    }    //具体的同事类1    class ConcreateColleague1:Colleague    {        public ConcreateColleague1(Mediator mediator) : base(mediator)        {        }        //发送消息时通常使中介者发送出去的。        public void Send(string message)        {            mediator.Send(message, this);        }        public void Notify(string message)        {            Console.WriteLine($"同事1得到消息{message}");        }    }    class ConcreateColleague2:Colleague    {        public ConcreateColleague2(Mediator mediator) : base(mediator)        {        }        public void Send(string message)        {            mediator.Send(message, this);        }        public void Notify(string message)        {            Console.WriteLine($"同事2得到消息{message}");        }    }

  

客户端调用

public static void Main()        {            ConcreteMediator m = new ConcreteMediator();            //让两个具体同事类认识中介者对象            ConcreateColleague1 c1 = new ConcreateColleague1(m);            ConcreateColleague2 c2 = new ConcreateColleague2(m);            //让中介者认识各个具体同事类对象            m.Colleague1 = c1;            m.Colleague2 = c2;            //具体同事类对象的发送信息都使通过中介者转发            c1.Send("吃饭了吗?");            c2.Send("还没有呢,你打算请客吗?");            Console.ReadKey();        }

中介者模式很容易再系统中应用,也很容易再系统中误用。当系统出现‘多对多’交互复杂的对象群时,不要急于使用中介者模式,而要先反思你的系统在设计商是不是合理。

由于把对象如何协同进行了抽象,将中介作为一个独立的概念并将其封装在一个对象中,这样关注的对象就从对象各自本身的行为转移到他们之间的交互上来,也就是站在一个更宏观的角度去看待系统。

中介者模式一般应用于一组对象以定义良好但是复杂的方式进行通信的场合,以及想定制一个分布在多个类中的行为,而又不想生成太多的子类的场合。

好,中介者模式今天我们就讲到这里,下一篇我们讲 享元模式

转载于:https://www.cnblogs.com/yaoworld/p/6401651.html

你可能感兴趣的文章
Leetcode 142. Linked List Cycle IIJAVA语言
查看>>
网络基础5
查看>>
Exchange Supported operating system platforms
查看>>
unity3鼠标点击移动
查看>>
Linux 安装中文包
查看>>
谷物大脑
查看>>
访问控制-禁止php解析、user_agent,PHP相关配置
查看>>
AgileEAS.NET之系统架构
查看>>
python3.5里的正则表达式
查看>>
Exchange server 2013 SP1 客户端会议室邮箱自动回复延迟
查看>>
nginx反向代理缓存服务器构建
查看>>
RHEL6 搭建LVS/DR 负载均衡集群 案例
查看>>
以太坊·Rinkeby 测试网络
查看>>
字符串按规则排序算法
查看>>
MPLS + BGP高级特性
查看>>
plist文件读写操作
查看>>
oracle resetlogs和noresetlogs 创建控制文件区别
查看>>
2013-7-17学习作业练习
查看>>
ZAM 3D入门教程(4):Extrusion编辑器
查看>>
《深入实践Spring Boot》一第2章 在Spring Boot中使用数据库2.1 使用MySQL
查看>>