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();

            }

  • 相关阅读:
    《学习OpenCV》练习题第五章第二题abc
    《学习OpenCV》练习题第五章第一题ab
    《学习OpenCV》练习题第四章第八题ab
    《学习OpenCV》练习题第四章第三题b
    《学习OpenCV》练习题第四章第三题a
    《学习OpenCV》练习题第四章第二题
    《学习OpenCV》练习题第四章第一题b&c
    《学习OpenCV》练习题第四章第一题a
    《学习OpenCV》练习题第四章第七题abc
    【T^T 1736】【FJUTOJ 1077】排座位
  • 原文地址:https://www.cnblogs.com/yaoge/p/1815235.html
Copyright © 2011-2022 走看看