当前位置:K88软件开发文章中心编程语言.NET.NET02 → 文章内容

略谈.net中观察者模式的实现方法

减小字体 增大字体 作者:佚名  来源:翔宇亭IT乐园  发布时间:2019-1-3 0:48:54

:2011-04-12 16:06:40

本文讲解了观察者模式的具体实现方法。

观察者模式是设计模式里经常被用到的一种,什么叫观察者模式,字面理解就是一个或多个对象观察某个对象这种观察是有目的地,当被观察者发生某种事件时能准确的反馈到外界,通知大家你发生了什么;尤其是在今天面向对象编程的不断成熟,什么都讲究抽象将重复劳动省到最少,方法成员都以类为容器封装;这是一种好的编程规则,就好比我们所生存的大自然坏境一样,汽车与人都是独立的生存个体,大家互不干扰,我不需要知道我存在的意义,存在的意义是对别人而言;

进入主题,上面刚才讲到了汽车与人,打个比方当我们乘坐公交车的时候,我并不认识路我需要车到的时候通知乘客你到了哪个站,我们好下车;在我们做开发的时候经常会遇到这种情况,我要某个按钮被鼠标点击了之后弹出一个文本框出来,等等;继续汽车与人的比方,当汽车到站后通过什么方式通知大家你到某某站了呢,这就涉及到汽车这么一个实体是否具有到站事件,如果没有可能他永远都不会听,请看图一:

上是一个汽车和四个乘客实体图,当汽车到达某个站的时候应该告诉乘客到了哪个站了让乘客判断一下是否是自己要下的站,请看图二:

 

图上是汽车到了站点1时通知乘客,并将到站的信息传递给乘客让乘客判断是否下车,如果某乘客要下车可以通知驾驶员我要下车,请看图三:

乘客判断消息是否是自己要下的站,如果是发出消息给汽车驾驶员,我们这里把驾驶员和汽车当成一体的由汽车为统称;汽车接收到乘客的下车信息后打开车门让乘客下车;我们只要把图的信息落实到代码上就OK了,请看代码图:

这是汽车类的代码段

/// <summary>
        /// 乘客类
        /// </summary>
        public class 乘客
        {
              /// <summary>
              /// 下车事件
              /// </summary>
              public event EventHandler StopEvent;
             /// <summary>
             /// 默认构造函数
             /// </summary>
             public 乘客()
             { 
                //订阅汽车到站事件
                汽车.StationEvent += new 汽车.StationHandler(汽车_StationEvent)
             }

     void 汽车_StationEvent(string stationname)
             {
                    //汽车到站了,我看看是否我要下车
                    if(stationname == "我要下的站名称")
                          OnStopEvent();  //触发下车事件,下车
             }

      /// <summary>
              /// 触发的下车事件
              /// </summary>
              private void OnStopEvent()
              {
                      StopEvent(null, null);    //告诉汽车,我要下车
               }
        }

这是乘客的代码段;

/// <summary>
        /// 模拟整个过程的类
        /// </summary>
       
public class 过程
        {
               //启动整个过程
               public void Run()
               {
                       for (int i = 0; i < 10; i++)

                       {
                                乘客 passenger = new 乘客();      //实例化一个乘客实例
                                汽车.Add乘客(passenger);    //上车
                       }
               }
        }

以上就是观察者模式的一个具体实例;

本文出自 “深度训练” 博客,请务必保留此出处http://wangqingpei557.blog.51cto.com/1009349/541396


略谈.net中观察者模式的实现方法