设计模式实践-观察者模式
场景
实现仪表时间的同步
实现代码
时间同步器接口
namespace DesignPatterns.Observer
{
/// <summary>
/// 时间同步器接口
/// </summary>
public interface ITimeSynchronizer
{
/// <summary>
/// 增加观察者
/// </summary>
/// <param name="observer">观察者对象</param>
void Add(IMeterObserver observer);
/// <summary>
/// 删除观察者
/// </summary>
/// <param name="observer">观察者</param>
void Del(IMeterObserver observer);
/// <summary>
/// 通知观察者同步时间
/// </summary>
void Notify();
}
}
时间同步器对象
namespace DesignPatterns.Observer
{
/// <summary>
/// 时间同步器对象
/// </summary>
public class TimeSynchronizer : ITimeSynchronizer
{
/// <summary>
/// 观察者列表
/// </summary>
private List<IMeterObserver> _meters = new List<IMeterObserver>();
/// <summary>
/// 增加观察者
/// </summary>
/// <param name="observer">观察者对象</param>
public void Add(IMeterObserver observer)
{
this._meters.Add(observer);
}
/// <summary>
/// 删除观察者
/// </summary>
/// <param name="observer">观察者对象</param>
public void Del(IMeterObserver observer)
{
this._meters.Remove(observer);
}
/// <summary>
/// 发送同步命令
/// </summary>
public void Notify()
{
foreach (var meter in this._meters)
{
meter.Update();
}
}
}
}
仪表观察者接口
namespace DesignPatterns.Observer
{
/// <summary>
/// 观察者接口
/// </summary>
public interface IMeterObserver
{
/// <summary>
/// 同步时间
/// </summary>
void Update();
}
}
仪表A
namespace DesignPatterns.Observer
{
/// <summary>
/// 仪表A观察者
/// </summary>
public class MeterA : IMeterObserver
{
/// <summary>
/// 更新同步时间
/// </summary>
public void Update()
{
Console.WriteLine("同步时间");
}
}
}
仪表B
namespace DesignPatterns.Observer
{
/// <summary>
/// 仪表B观察者
/// </summary>
public class MeterB : IMeterObserver
{
/// <summary>
/// 更新同步时间
/// </summary>
public void Update()
{
Console.WriteLine("同步时间");
}
}
}
相关调用
ITimeSynchronizer timeSynchronizer = new TimeSynchronizer();
timeSynchronizer.Add(new Observer.MeterA());
timeSynchronizer.Add(new Observer.MeterB());
timeSynchronizer.Add(new Observer.MeterA());
timeSynchronizer.Add(new Observer.MeterB());
timeSynchronizer.Add(new Observer.MeterA());
timeSynchronizer.Add(new Observer.MeterA());
timeSynchronizer.Add(new Observer.MeterB());
timeSynchronizer.Notify();
Out:
同步时间
同步时间
同步时间
同步时间
同步时间
同步时间
同步时间