zoukankan      html  css  js  c++  java
  • 设计模式1 订阅者模式

    参与者: 订阅者, 发布者

    1 订阅者要实现的接口:对发布者的更新做反应

    public Interface IObserver()
    {
     
    void BeNoticed();
    }

    2 发布者实现的接口: 管理订阅者, 通知订阅者.

    public interface ISubject
    {
      
    void AddObserver(Observer o);
    void RemoveObserver(Observer o);
     
    void NoticeObservers();
    }

    用 狗叫  猫跑 人醒 来做例子

     狗是发布者  人和猫都是订阅者 . 狗叫这个变化需要通知订阅者

     public class Dog:ISubject
    {
     List
    <IObserver> observers;

    public Dog()

    {

     observers
    =new List<IObserver>();

    }

    public void AddObserver(IObserver o)

    {

     observers.Add(o);

    }

    public void RemoveObserver(IObserver o)

    {

      observers.Remove(o);

    }

    public void Bark()

    {

    NoticeObservers();

    }

    public void NoticeObservers()

    {

      
    foreach(IObserver o in observers)

            {

                   o.BeNoticed();

             }

       }
    }

    实现订阅者  猫 和 人

    public class Cat:IObserver

    {

    public void Run()

    {

         Console.WriteLine(
    "I am Running!");

    }

     
    public void BeNoticed()

    {

           Run();

    }

    }


    public class Owner:IObserver

    {

      
    public void WakeUp()

    {

      Console.WriteLine(
    "i am waked up");

     }

    public void BeNoticed()

    {

     WakeUp();

    }

    }

    狗 猫 人 都构建好了 , 现在就把他们放在真实世界里 然后让狗叫一下 看发生了什么

     

    class Demo

    {

    void static Main()

    {

       Dog dog
    =new Dog();

       Cat cat
    =new Cat();

     Owner owner
    =new Owner();

      dog.AddObserver(cat);

    dog.AddObserver(owner);

     dog.Bark();

    }

    }

    程序输出结果如下:

    i am running!

    i am waked up!

  • 相关阅读:
    noip模拟赛#38
    noip模拟赛#45
    noip模拟赛#15
    noip模拟赛#14
    noip模拟赛
    rp++
    bzoj2127: happiness
    bzoj3209:3209: 花神的数论题
    10.1 plan
    FFT
  • 原文地址:https://www.cnblogs.com/phiree/p/1407847.html
Copyright © 2011-2022 走看看