且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

设计模式-观察者模式

更新时间:2022-09-21 23:04:28

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace PatternProject
{
    public interface ITrain
    {
        string From
        getset; }
 
        string To
        getset; }
 
        DateTime StartingDateTime
        getset; }
 
        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
        getset; }
 
       public string To
        getset; }
 
       public DateTime StartingDateTime
        getset; }
 
       public Train(string fromstring 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("还未到开车时间,敬请稍候!");
           }
       }
    }
 
 
}<br><br>

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
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();
        }
    }
}

  本文转自 梦在旅途 博客园博客,原文链接: http://www.cnblogs.com/zuowj/p/3504852.html ,如需转载请自行联系原作者