zoukankan      html  css  js  c++  java
  • 【原创】设计模式面对面之观察者模式

    观察者模式

    观察者模式主要涉及两种对象:观察目标对象,观察对象。

    类图:

     

    常用的实现方式:

    目标对象

     //观察目标
        public class Target {
    
            private readonly string _content;
            private readonly List<Observer> _observers;
    
            public Target()
            {
                _observers=new List<Observer>();
                _content = "今天不用上班了!!";
                Register();
            }
    
            public void Notify(){
                _observers.ForEach(x =>
                {
                    x.Receive(_content);
                });
            }
    
            private void Register(){
                var observer1 = new Observer("observer1");
                var observer2 = new Observer("observer2");
                var observer3 = new Observer("observer3");
                _observers.Add(observer1);
                _observers.Add(observer2);
                _observers.Add(observer3);
            }
    
        }//end Target
    View Code

    观察对象

     //观察对象
        public class Observer
        {
    
            private readonly string _name;
            public Observer(string name)
            {
                _name = name;
            }
    
            public void Receive(string content){
                Console.WriteLine($"{_name}收到:{content}");
            }
    
        }//end Observer
    View Code

     调用:

     class Program
        {
            static void Main(string[] args)
            {
               
    
                //观察者
                var target = new Target();
    
                target.Notify();
                Console.ReadLine();
    
    
            }
        }
    View Code

     使用场景:

    观察者模式事先已经知道要通知那些对象了这是和订阅模式的主要区别,两者如何选择根据场景判断。

  • 相关阅读:
    hdu 5036 概率+bitset
    hdu 5037 周期优化
    hdu 5038 求出现次数最多的grade
    hdu 5040 bfs
    hdu 5045 N个人做M道题的正确率
    hdu 5046 二分+DLX模板
    hdu 5047 大数找规律
    c:set注意事项
    It is indirectly referenced from required .class files(导入项目报错原因与解决方法)
    oracle-01722,函数subtr,instr
  • 原文地址:https://www.cnblogs.com/dujq/p/7813885.html
Copyright © 2011-2022 走看看