zoukankan      html  css  js  c++  java
  • 观察者模式-C#实现

    定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。

    观察者模式有四个角色:抽象主题、具体主题、抽象观察者、具体观察者。

    抽象主题:把所有观察者对象的引用保存到一个聚集里,每个主题都可以有任何数量的观察者。

    具体主题:将有关状态存入具体观察者对象;在具体主题内部状态改变时,给所有登记过的观察者发出通知。

    抽象观察者:为所有的具体观察者定义一个接口,在得到主题通知时更新自己。

    具体观察者:实现抽象观察者角色所要求的更新接口,以便使本身的状态与主题状态协调。

    namespace DP_Observer
    {
        public abstract class Observer
        {
            public abstract void Update();
        }
    
        public abstract class Subject
        {
            private List<Observer> observers = new List<Observer>();
    
            public void Add(Observer observer) => observers.Add(observer);
    
            public void Remove(Observer observer) => observers.Remove(observer);
    
            public void Notify()
            {
                foreach (var o in observers)
                    o.Update();
            }
        }
    
        public class ConcreteSubject : Subject
        {
            public string State { get; set; }
        }
    
        public class ConcreteObserver : Observer
        {
            private string _name;
            private string _state;
            private ConcreteSubject subject;
    
            public ConcreteObserver(ConcreteSubject sub, string name)
            {
                subject = sub;
                _name = name;
            }
    
            public override void Update()
            {
                _state = subject.State;
            }
        }
    }
    

    客户端调用:

    var subject = new ConcreteSubject();
    subject.Add(new ConcreteObserver(subject, "1"));
    subject.Add(new ConcreteObserver(subject, "2"));
    
    subject.State = "changed";
    subject.Notify();
    
  • 相关阅读:
    线段树专辑—— pku 1436 Horizontally Visible Segments
    线段树专辑——pku 3667 Hotel
    线段树专辑——hdu 1540 Tunnel Warfare
    线段树专辑—— hdu 1828 Picture
    线段树专辑—— hdu 1542 Atlantis
    线段树专辑 —— pku 2482 Stars in Your Window
    线段树专辑 —— pku 3225 Help with Intervals
    线段树专辑—— hdu 1255 覆盖的面积
    线段树专辑—— hdu 3016 Man Down
    Ajax跨域访问
  • 原文地址:https://www.cnblogs.com/zhiyong-ITNote/p/10970067.html
Copyright © 2011-2022 走看看