• 观察者模式(Observer Pattern)


    观察者模式:定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主体对象,这个主题对象在状态发生变化时,会通知所有观察者。当一个对象改变需要同时改变其他对象,而且他不知道具体有多少对象需要改变的时候,应该考虑使用观察者模式。

    Define a one-to-many dependency between objects so that when one objects changes state,all its dependents are notified and updated automatically.

    观察者结构图:

    代码:

        public abstract class Subject
        {
            private IList<Observer> observers = new List<Observer>();
    
            public void Attach(Observer observer)
            {
                observers.Add(observer);
            }
    
            public void Detach(Observer observer)
            {
                observers.Remove(observer);
            }
    
            public void Notify()
            {
                foreach (Observer o in observers)
                {
                    o.Update();
                }
            }
        }
    
        public abstract class Observer
        {
            public abstract void Update();
        }
    
        public class ConcreteSubject : Subject
        {
            private string subjectState;
            public string SubjectState
            {
                get { return subjectState; }
                set { subjectState = value; }
            }
        }
    
        public class ConcreteObserver : Observer
        {
            private string name;
            private string observerState;
            private ConcreteSubject subject;
            public ConcreteSubject Subject
            {
                get { return subject; }
                set { subject = value; }
            }
            public ConcreteObserver(ConcreteSubject subject, string name)
            {
                this.subject = subject;
                this.name = name;
            }
    
            public override void Update()
            {
                observerState = subject.SubjectState;
                Console.WriteLine("观察者{0}的新状态是{1}",name,observerState);
            }
        }

    引用:

                ConcreteSubject c = new ConcreteSubject();
                c.Attach(new ConcreteObserver(c, "A"));
                c.Attach(new ConcreteObserver(c, "b"));
                c.Attach(new ConcreteObserver(c, "z"));
                c.SubjectState = "ABC";
                c.Notify();

    效果

  • 相关阅读:
    编译安装php5 解决编译安装的php加载不了gd
    apache-php
    使用ab对网站进行压力测试
    正则表达式实例 -- 匹配Windows消息宏
    SDK 操作 list-view control 实例 -- 遍历进程
    malloc/free、new/delete 区别
    Python实例 -- 爬虫
    multimap实例 -- 添加、遍历数据
    CListCtrl 扩展风格设置方法---SetExtendedStyle和ModifyStyleEx
    创建指定大小的空文件
  • 原文地址:https://www.cnblogs.com/nygfcn1234/p/3408989.html
Copyright © 2020-2023  润新知