zoukankan      html  css  js  c++  java
  • 设计模式 中介者模式(Mediator Pattern)

    意图

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

    适用性

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

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

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

    结构图

      

    Code

     1 // Mediator
     2 
     3 
     4 /* Notes:
     5  * Consider a mediator as a hub, which objects that need to talk -
     6  * but do not wish to be interdependent - can use. 
     7  */
     8  
     9 namespace Mediator_DesignPattern
    10 {
    11     using System;
    12 
    13     class Mediator 
    14     {
    15         private DataProviderColleague dataProvider;
    16         private DataConsumerColleague dataConsumer;
    17         public void IntroduceColleagues(DataProviderColleague c1, DataConsumerColleague c2)
    18         {
    19             dataProvider = c1;
    20             dataConsumer = c2;            
    21         }
    22         
    23         public void DataChanged()
    24         {
    25             int i = dataProvider.MyData;
    26             dataConsumer.NewValue(i);
    27         }
    28     }
    29 
    30     class DataConsumerColleague 
    31     {
    32         public void NewValue(int i)
    33         {
    34             Console.WriteLine("New value {0}", i);
    35         }
    36     }
    37 
    38     class DataProviderColleague
    39     {
    40         private Mediator mediator;
    41         private int iMyData=0;
    42         public int MyData 
    43         {
    44             get 
    45             {
    46                 return iMyData;
    47             }
    48             set 
    49             {
    50                 iMyData = value;
    51             }
    52         }
    53         public DataProviderColleague(Mediator m)
    54         {
    55             mediator = m;
    56         }
    57 
    58         public void ChangeData()
    59         {
    60             iMyData = 403;
    61 
    62             // Inform mediator that I have changed the data
    63             if (mediator != null)
    64                 mediator.DataChanged();    
    65         }        
    66     }
    67 
    68     /// <summary>
    69     ///    Summary description for Client.
    70     /// </summary>
    71     public class Client
    72     {
    73         public static int Main(string[] args)
    74         {            
    75             Mediator m = new Mediator();
    76             DataProviderColleague c1 = new DataProviderColleague(m);
    77             DataConsumerColleague c2 = new DataConsumerColleague();
    78             m.IntroduceColleagues(c1,c2);
    79 
    80             c1.ChangeData();
    81 
    82             return 0;
    83         }
    84     }
    85 }

    人生如棋、我愿为卒、行动虽缓、从未退过

  • 相关阅读:
    都是CSS惹的祸
    Ruby简介
    网络攻击利用DedeCms漏洞
    ASP.NET验证技术详解
    一个低级错误引发的血案
    FCKeditor配置和精简【附源码】
    邮件发送详解
    Timer定时器的设计实例详解
    常用的加密算法MD5、SHA1
    JS日历控件集合附效果图、源代码
  • 原文地址:https://www.cnblogs.com/sunjinpeng/p/2451831.html
Copyright © 2011-2022 走看看