zoukankan      html  css  js  c++  java
  • 十四.观察者模式

    观察者模式:

           又叫发布——订阅模式,定义一种1:n的依赖关系。

           抽象的观察者模式可以使两者封装在独立的对象中,使他们各自独立的改变和复用。

           解除耦合,让耦合的双方都依赖于抽象,使得各自的变化不会相互影响。

    Demo

           员工

           abstractclass Observer

        {

           protected string name;

           protected Subject sub;

           public Observer(string name, Subject sub)

           {

               this.name = name;

               this.sub = sub;

           }

           publicabstract void Update();

        }

       class StockObserver : Observer

        {

           publicStockObserver(string name, Subject sub) : base(name, sub) { }

           public override void Update()

           {

               Console.WriteLine("{0} {1}关闭股票,继续工作",sub.SubjectState,name );

           }

    }

    秘书

    interfaceSubject

        {

            void Attach(Observer observer);

            void Detach(Observer observer);

            void Notify();

            string SubjectState

            {

                get;

                set;

            }

        }

        class Boss : Subject

        {

            private IList<Observer> observers=newList<Observer>();

            private string action;

            public void Attach(Observer observer)

            {

                observers.Add(observer);

            }

            public void Detach(Observer observer)

            {

                observers.Remove(observer);

            }

            public voidNotify()

            {

                foreach(Observer o in observers)

                   o.Update();

            }

            public string SubjectState

            {

                get { return action; }

                set { action = value; }

            }

        }

    使用:

           static void Main(string[] args)

            {

                Boss boss = new Boss();

                StockObserver man = newStockObserver("tom",boss);

                boss.Attach(man);

                boss.SubjectState = "我来了";

                boss.Notify();

                Console.ReadKey();

            }

  • 相关阅读:
    【pyarmor】代码加密
    Multi-Window Data Augmentation Approach for Speech Emotion Recognition
    SVM / SVC / SVR
    【python】不同的dropout们
    【aubio】音频处理笔记
    Git 笔记
    【stay foolish】代码片段
    BERT笔记
    【pytorch】torch.utils.data数据处理
    Scoket例子
  • 原文地址:https://www.cnblogs.com/yaoge/p/1815235.html
Copyright © 2011-2022 走看看