• 设计模式——中介者模式


    名称 Mediator
    结构  
    意图 用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。
    适用性
    • 一组对象以定义良好但是复杂的方式进行通信。产生的相互依赖关系结构混乱且难以理解。
    • 一个对象引用其他很多对象并且直接与这些对象通信,导致难以复用该对象。
    • 想定制一个分布在多个类中的行为,而又不想生成太多的子类。
    Code Example
     1// Mediator
     2
     3// Intent: "Define an object that encapsulates how a set of objects interact. 
     4// Mediator promotes loose coupling by keeping objects from referring to each
     5// other explicitly, and it lets you vary their interaction independently." 
     6
     7// For further information, read "Design Patterns", p273, Gamma et al.,
     8// Addison-Wesley, ISBN:0-201-63361-2
     9
    10/* Notes:
    11 * Consider a mediator as a hub, which objects that need to talk -
    12 * but do not wish to be interdependent - can use. 
    13 */

    14 
    15namespace Mediator_DesignPattern
    16{
    17    using System;
    18
    19    class Mediator 
    20    {
    21        private DataProviderColleague dataProvider;
    22        private DataConsumerColleague dataConsumer;
    23        public void IntroduceColleagues(DataProviderColleague c1, DataConsumerColleague c2)
    24        {
    25            dataProvider = c1;
    26            dataConsumer = c2;            
    27        }

    28        
    29        public void DataChanged()
    30        {
    31            int i = dataProvider.MyData;
    32            dataConsumer.NewValue(i);
    33        }

    34    }

    35
    36    class DataConsumerColleague 
    37    {
    38        public void NewValue(int i)
    39        {
    40            Console.WriteLine("New value {0}", i);
    41        }

    42    }

    43
    44    class DataProviderColleague
    45    {
    46        private Mediator mediator;
    47        private int iMyData=0;
    48        public int MyData 
    49        {
    50            get 
    51            {
    52                return iMyData;
    53            }

    54            set 
    55            {
    56                iMyData = value;
    57            }

    58        }

    59        public DataProviderColleague(Mediator m)
    60        {
    61            mediator = m;
    62        }

    63
    64        public void ChangeData()
    65        {
    66            iMyData = 403;
    67
    68            // Inform mediator that I have changed the data
    69            if (mediator != null)
    70                mediator.DataChanged();    
    71        }
            
    72    }

    73
    74    /// <summary>
    75    ///    Summary description for Client.
    76    /// </summary>

    77    public class Client
    78    {
    79        public static int Main(string[] args)
    80        {            
    81            Mediator m = new Mediator();
    82            DataProviderColleague c1 = new DataProviderColleague(m);
    83            DataConsumerColleague c2 = new DataConsumerColleague();
    84            m.IntroduceColleagues(c1,c2);
    85
    86            c1.ChangeData();
    87
    88            return 0;
    89        }

    90    }

    91}

    92
    93
  • 相关阅读:
    算法分析实验题集
    程序猿怎样解除烦恼
    MYSQL设计优化
    模式匹配KMP
    ios创建画笔的样例(双笔画效果)
    命令行解析器
    作业还是作孽?——Leo鉴书79
    客户机增加域 及server文件共享
    MySQL教程及经常使用命令1.1
    jsTree插件简介(三)
  • 原文地址:https://www.cnblogs.com/DarkAngel/p/210468.html
Copyright © 2020-2023  润新知