zoukankan      html  css  js  c++  java
  • 设计模式:观察者模式(Observer)

    定  义:定义了一种一对多的依赖关系,让多个观察者对象同时监听某一主题对象。这个主题对象在状态发生

            变化时,会通知所有观察者对象,使他们能够自动更新自己。

    结构图

    抽象主题类

    abstract class Subject
        {
            private IList<Observer> observers = new List<Observer>();
    
            /// <summary>
            /// 增加观察者
            /// </summary>
            /// <param name="observer"></param>
            public void Attach(Observer observer)
            {
                observers.Add(observer);
            }
    
            /// <summary>
            /// 移除观察者
            /// </summary>
            /// <param name="observer"></param>
            public void Detach(Observer observer)
            {
                observers.Remove(observer);
            }
    
            //通知
            public void Notify()
            {
                foreach (Observer observer in observers)
                {
                    observer.Update();
                }
            }
        }
    View Code

    抽象观察者类

     abstract class Observer
        {
            public abstract void Update();
        }
    View Code

    具体主题类

     class ConcreteSubject : Subject
        {
            private string subjectState;
    
            //具体被观察者状态
            public string SubjectState
            {
                get { return subjectState; }
                set { subjectState = value; }
            }
        }
    View Code

    具体观察者类

     class ConcreteObserver : Observer
        {
            private string name;
            private string observerState;
            private ConcreteSubject subject;
    
            public ConcreteObserver(ConcreteSubject subject, string name)
            {
                this.name = name;
                this.subject = subject;
            }
    
            public override void Update()
            {
                observerState = subject.SubjectState;
                Console.WriteLine("观察者{0}的新状态为{1}", name, observerState);
            }
    
            public ConcreteSubject Subject
            {
                get { return subject; }
                set { subject = value; }
            }
        }
    View Code

    客户端代码

                ConcreteSubject s = new ConcreteSubject();
    
                s.Attach(new ConcreteObserver(s, "X"));
                s.Attach(new ConcreteObserver(s, "Y"));
                s.Attach(new ConcreteObserver(s, "Z"));
    
                s.SubjectState = "ABC";
                s.Notify();    
    View Code
  • 相关阅读:
    Windows 任务调度程序定时执行Python脚本
    sklearn 学习 第三篇:knn分类
    sklearn 学习 第二篇:特征预处理
    sklearn 学习 第一篇:分类
    DAX 第六篇:统计函数(描述性统计)
    DAX 第四篇:CALCULATE详解
    DAX 第三篇:过滤器函数
    DAX 第二篇:计算上下文
    DAX 第一篇:数据模型
    Git 第二篇:基本操作
  • 原文地址:https://www.cnblogs.com/qianxingdewoniu/p/3547579.html
Copyright © 2011-2022 走看看