设计模式实践-观察者模式

场景

实现仪表时间的同步

实现代码

时间同步器接口

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:

同步时间
同步时间
同步时间
同步时间
同步时间
同步时间
同步时间
posted @ 2016-08-01 21:38  4Thing  阅读(109)  评论(0编辑  收藏  举报