设计模式--中介模式

概念
用一个中介对象来封装一些列的对象交互。终结者使各对象不需要显示的相互引用,从而使得其耦合松散,而且可以独立的改变他们之间的交互。
ps:也称为调停者模式


优点

  • 减少类间的依赖,将一对多的一依赖变成了一对一的依赖。
  • 降低类间的耦合
  • 从宏观(系统)的角度来看待问题(关注点由行为到交互)

缺点

  • 中介者复杂性增加
    • 因为类的增多,中介者膨胀,其逻辑增加变得复杂
      ?是否在存在多个依赖关系的情况下就考虑适用中介者模式呢?
      不是的,中介者模式也不一定能够将逻辑理清,切存在引入中介者模式后逻辑更复杂的情况(中介者模式的缺点)

适用情况

  • 产品开发
  • N个对象之间有相互依赖关系
  • 多个对象有依赖关系,但是依赖的行为不确定

结构图

在这里插入图片描述


角色介绍

  • Mediator
    抽象中介者,定义了同时角色之间的通信
  • Colleague
    抽象同时类,同事角色,同事角色知道中介者角色,与其他同事通信时通过中介者
  • ConcreteMediator
    具体中介者角色,依赖于各个同事角色
  • ConcreteColleague
    具体的同事类,每个同事类知道自己的行为并知道中介者的存在

实现

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

  • Colleague
abstract class Colleague
    {
        protected Mediator mediator;

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

    }
  • ConcreteMediator
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 )
            {
                colleague2.Notify(message);//根据对象做出判断,通知
            }
            else
            {
                colleague1.Notify(message);
            }
        }
  • ConcreteColleague
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);

        }
    }

自结
利用中介模式,同事1和同事2可以交换信息,完成信息传递
其实中介模式就如同一个中间商,作为一个中间者转换两者间的交互

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值