• 设计模式-观察者模式


    观察模式:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时, 所有依赖于它的对象都得到通知并被自动更新;

    以下的列子含义:当车站要求指定的列车发车,所有在站内的列表均得到发车通知!

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace PatternProject
    {
        public interface ITrain
        {
            string From
            { get; set; }
    
            string To
            { get; set; }
    
            DateTime StartingDateTime
            { get; set; }
    
            void Start(ITrain train);
        }
    
        public interface IStation
        {
            void AddTrain(ITrain train);
            void CancelTrain(ITrain train);
            void StartNotify(ITrain train);
        }
    
        public class Station : IStation
        {
            List<ITrain> _trainList = new List<ITrain>();
    
            public void AddTrain(ITrain train)
            {
                _trainList.Add(train);
            }
    
            public void CancelTrain(ITrain train)
            {
                _trainList.Remove(train);
            }
    
            public void StartNotify(ITrain train)
            {
                foreach (ITrain t in _trainList)
                {
                    t.Start(train);
                }
            }
        }
    
        public class Train : ITrain
        {
           public string From
            { get; set; }
    
           public string To
            { get; set; }
    
           public DateTime StartingDateTime
            { get; set; }
    
           public Train(string from, string to, DateTime startingDateTime)
           {
               this.From = from;
               this.To = to;
               this.StartingDateTime = startingDateTime;
           }
    
           public bool IsCurrent(ITrain train)
           {
               if (train.From == this.From && train.To == this.To && train.StartingDateTime == this.StartingDateTime)
               {
                   return true;
               }
               else
               {
                   return false;
               }
           }
    
           public void Start(ITrain train)
           {
               Console.WriteLine("{0}开往{1}列车收到通知:",this.From,this.To);
               if (IsCurrent(train))
               {
                   Console.WriteLine("从{0}开往{1}的列车,于{2}开车,敬请注意!", this.From, this.To, this.StartingDateTime);
               }
               else
               {
                   Console.WriteLine("还未到开车时间,敬请稍候!");
               }
           }
        }
    
    
    }

     

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace PatternProject
    {
        class Program
        {
            static void Main(string[] args)
            {
    
                Station station = new Station();
                
                station.AddTrain(new Train("北京", "上海", new DateTime(2014, 5, 1)));
                station.AddTrain(new Train("北京", "武汉", new DateTime(2014, 3, 1)));
                station.AddTrain(new Train("武汉", "上海", new DateTime(2014, 2, 1)));
                station.AddTrain(new Train("上海", "南京", new DateTime(2014, 8, 1)));
    
                Train t = new Train("北京", "武汉", new DateTime(2014, 3, 1));
    
                station.StartNotify(t);
    
                Console.ReadKey();
            }
        }
    }
    

      

  • 相关阅读:
    Unicode详解
    VC++ 6.0 中如何使用 CRT 调试功能来检测内存泄漏
    关于MFC下检查和消除内存泄露的技巧
    ASCII 、GB2312、GBK、GB18030、unicode、UTF8字符集编码详解
    A note from UrlEscape Function
    Unicode和UTF8之间的转换详解
    Base64编码
    全面解读WM_NOTIFY
    关于URL编码
    URL的#号
  • 原文地址:https://www.cnblogs.com/zuowj/p/3504852.html
Copyright © 2020-2023  润新知