1
yhj
2024-07-24 5e5d945e91568b973faa27d8ab0bcef99fc4a6c5
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
#region
 
using System.Collections.Generic;
using System.Data;
using System.Windows.Forms;
using CSFrameworkV5.Core;
 
#endregion
 
namespace CSFrameworkV5.Business
{
    /// <summary>
    ///     数据字典的观察者清单
    /// </summary>
    public class DataDictObservers
    {
        private static List<IObserver> _Observers = new List<IObserver>();
 
        /// <summary>
        ///     增加观察者到队列
        /// </summary>
        /// <param name="observer">观察者</param>
        public static void Add(IObserver observer)
        {
            _Observers.Add(observer);
        }
 
        /// <summary>
        ///     通知观察者
        /// </summary>
        /// <param name="observerName">观察者名称</param>
        public static void Notify(string observerName)
        {
            foreach (var o in _Observers)
                if (o.Name == observerName)
                    o.Notify();
        }
    }
 
    /// <summary>
    ///     字典缓存数据的观察者基类。
    /// </summary>
    public class DataDictBaseObserver : IObserver
    {
        protected string _Name = "";
        protected object _ObservedData;
 
        public DataDictBaseObserver(string observerName, object observedData)
        {
            _Name = observerName;
            _ObservedData = observedData;
        }
 
        public string Name => _Name;
 
        public virtual void Notify()
        {
        }
    }
 
    /// <summary>
    ///     观察者模式使用例子
    /// </summary>
    public class ObserverSizeCombo : DataDictBaseObserver
    {
        private ComboBox.ObjectCollection _combo;
 
        public ObserverSizeCombo(string observerName,
            ComboBox.ObjectCollection combo, DataTable cachedData)
            : base(observerName, cachedData)
        {
            _combo = combo;
            DataDictObservers.Add(this);
        }
 
        public override void Notify()
        {
            var dt = _ObservedData as DataTable;
 
            _combo.Clear();
            foreach (DataRow row in dt.Rows) _combo.Add(row["SizeID"]);
        }
    }
}