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

            }

  • 相关阅读:
    demo 集合
    iOS12、iOS11、iOS10、iOS9常见适配
    gem install cocoapods ERROR: While executing gem ... (Gem::FilePermissionError)
    ios LaunchScreen.storyboard 适配启动图
    加载资源文件读取以及转换成字符串的方法
    [UIApplication sharedApplication].keyWindow和[[UIApplication sharedApplication].delegate window]区别
    婚庆手机APP
    从一部电视剧开始
    论一次使用代理模式实现共用导出报表的功能
    MySql中使用EXPLAIN查看sql的执行计划
  • 原文地址:https://www.cnblogs.com/yaoge/p/1815235.html
Copyright © 2011-2022 走看看