码迷,mamicode.com
首页 > 其他好文 > 详细

设计模式之-观察者模式

时间:2014-06-25 11:20:41      阅读:317      评论:0      收藏:0      [点我收藏+]

标签:style   class   blog   code   http   tar   

该文代码来自设计模式之惮一书。

观察者模式定义:

  观察者模式也叫做发布订阅模式。

观察者模式中的角色:

  1、被观察者

    被观察者职责为管理观察者并通知观察者。

  2、观察者

    对接受到的消息进行处理

bubuko.com,布布扣
/// <summary>
    /// 被观察者
    /// </summary>
    public abstract class Subject
    {
        /// <summary>
        /// 观察者集合
        /// </summary>
        private List<IObservable> observableList = new List<IObservable>();

        /// <summary>
        /// 增加观察者
        /// </summary>
        /// <param name="observable">观察者</param>
        public void AddAbservable(IObservable observable)
        {
            this.observableList.Add(observable);
        }

        /// <summary>
        /// 删除观察者
        /// </summary>
        /// <param name="observable">观察者</param>
        public void DeleteAbservable(IObservable observable)
        {
            this.observableList.Remove(observable);
        }
       
        /// <summary>
        /// 通知所有的观察者
        /// </summary>
        /// <param name="context">通知内容</param>
        public virtual void NotifyMessage(string context)
        {
            Parallel.ForEach(this.observableList, p => p.Update());
        }
    }
被观察者(Subject)
bubuko.com,布布扣
 /// <summary>
    ///     观察者
    /// </summary>
    public interface IObservable
    {
        /// <summary>
        ///     更新方法
        /// </summary>
        void Update();
    }
观察者(IObservable)
bubuko.com,布布扣
 /// <summary>
    /// 具体的被观察者
    /// </summary>
    public class ConcreteSubject : Subject
    {
        /// <summary>
        /// 具体业务
        /// </summary>
        public void DoSomething()
        {
            base.NotifyMessage("");
        }
    }
具体的被观察者(ConcreteSubject)
bubuko.com,布布扣
/// <summary>
    /// 具体观察者
    /// </summary>
    public class ConcreteObservable : IObservable
    {
        /// <summary>
        /// 更新(接收处理消息)
        /// </summary>
        public void Update()
        {
            //todo
        }
    }
具体观察者(ConcreteObservable )
bubuko.com,布布扣
[TestClass]
    public class UnitTest1
    {
        [TestMethod]
        public void TestMethod1()
        {
            var subject = new ConcreteSubject();

            var obs = new ConcreteObservable();

            subject.AddAbservable(obs);

            subject.DoSomething();
        }
    }
场景类(UnitTest1)

详细细节查看设计模式之惮一书-观察者模式.

设计模式之-观察者模式,布布扣,bubuko.com

设计模式之-观察者模式

标签:style   class   blog   code   http   tar   

原文地址:http://www.cnblogs.com/-ShiL/p/Star_200920140625.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!