#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"]);
|
}
|
}
|
}
|