设计模式-观察者模式

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

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

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();
        }
    }
}

  

你可能感兴趣的:(观察者模式)