zoukankan      html  css  js  c++  java
  • 中介者模式

    中介者模式

     

         概述:

     

         在软件开发中,我们有时会碰上许多对象互相联系互相交互的情况,对象之间存在复杂的引用关系,当需求更改时,对系统进行修改将会非常困难。为了对系统的对象进行解耦,可以引入一个间接层来管理对象之间的关系,这就是中介者模式。

         

        结构图:

     

     

     

          借图理解:

       使用中介者

       

     

           示例:

     

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
      /// <summary>
        /// 抽象中介者
        /// </summary>
        public abstract class Mediator
        {
            public Colleague _colleague;
            public Colleague GetColleague()
            {
                return _colleague;
     
            }
            public void SetColleague(Colleague colleague)
            {
                _colleague = colleague;
            }
            public abstract void DoSomething();
     
        }
        /// <summary>
        /// 具体的中介者
        /// </summary>
        public class ConcreteMediator : Mediator
        
         public override void DoSomething()
         {
             //调用Colleague对象的方法
             _colleague.Method();
         }
        }
        /// <summary>
        /// 抽象Colleague
        /// </summary>
        public abstract class Colleague
        {
           public abstract void Method();
        }
        /// <summary>
        /// 具体的Colleague
        /// </summary>
        public class ConcreteColleague1:Colleague
        {
     
            private Mediator mediator;
            public ConcreteColleague1(Mediator mediator)
            {
                this.mediator = mediator;
            }
            public override void Method()
            {
                Console.WriteLine("ConcreteColleague1要做的事!");
            }
        }
        /// <summary>
        /// 具体的Colleague
        /// </summary>
        public class ConcreteColleague2 : Colleague
        {
     
            private Mediator mediator;
            public ConcreteColleague2(Mediator mediator)
            {
                this.mediator = mediator;
            }
            public override void Method()
            {
                Console.WriteLine("ConcreteColleague2要做的事!");
            }
        }

    客户端调用

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
        class Program
        {
            static void Main(string[] args)
            {
     
                Mediator mediator = new ConcreteMediator();
     
                Colleague coll1 = new ConcreteColleague1(mediator);
                mediator.SetColleague(coll1);
                coll1.Method();
                Console.ReadLine();
     
                Colleague coll2 = new ConcreteColleague2(mediator);
                mediator.SetColleague(coll2);
                coll2.Method();
                Console.ReadLine();
            }
        }

        效果:

        

            1.降低了系统对象之间的耦合性,使得对象易于独立的被复用。

            2.提高系统的灵活性,使得系统易于扩展和维护。

        适用场景:

         

             1.一组对象以定义良好但是复杂的方式进行通信。产生的相互依赖关系结构混乱且难以理解。 

             2.一个对象引用其他很多对象并且直接与这些对象通信,导致难以复用该对象。

             3.想定制一个分布在多个类中的行为,而又不想生成太多的子类。

         设计模式系列文章入口

  • 相关阅读:
    MySQL
    权限(二)
    权限(一)
    化栈为队
    栈的最小值
    实现简易版react中createElement和render方法
    12.整数转罗马数字
    call,apply,bind的理解
    8. 字符串转换整数 (atoi)
    172.阶乘后的0
  • 原文地址:https://www.cnblogs.com/sc0791/p/3676909.html
Copyright © 2011-2022 走看看