observer.cs

来自「C#设计模式源码」· CS 代码 · 共 105 行

CS
105
字号
using System;
using System.Collections.Generic;
using System.Text;

namespace DesignDll
{

    /************************************************************************
     * 观擦者模式;(Observer) 定义了一种一对多的依赖关系,让多个观察者者对象同时
     * 监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,
     * 使它们能够自动更新自已
     * **********************************************************************/

    /// <summary>
    /// 抽象主题通知者
    /// </summary>
    abstract class Subject
    {
        private IList<Observer> observers = new List<Observer>();

        /// <summary>
        /// 增加观察者
        /// </summary>
        public void AddObserver(Observer observer)
        {
            observers.Add(observer);
        }

        /// <summary>
        /// 删除观察者
        /// </summary>
        /// <param name="observer"></param>
        public void DelObserver(Observer observer)
        {
            observers.Remove(observer);
        }


        /// <summary>
        /// 通知观察者
        /// </summary>
        public void Noitfy()
        {
            foreach (Observer o in observers)
            {
                o.Update();
            }
        }


    }


    /// <summary>
    /// 抽象观察者类
    /// </summary>
    abstract class Observer
    {
        public abstract void Update();
    }

    /// <summary>
    /// 具体通知者类
    /// </summary>
    class ConcreteSubject : Subject
    {
        private string subjectState;

        public string SubjectState
        {
            get { return subjectState; }
            set { subjectState = value; }
        }
    }


    /// <summary>
    /// 具体通知者类
    /// </summary>
    class ConcreteObserver : Observer
    {
        //姓名
        private string name;
        //观察状态
        private string ObserverState;
        //通知对象
        private ConcreteSubject subject;

        public ConcreteObserver(string sName, ConcreteSubject ConSubject)
        {
            this.name = sName;
            this.subject = ConSubject;
        }

        // 更新参数
        public override void Update()
        {
            //throw new Exception("The method or operation is not implemented.");
        }

    }


}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?