zoukankan      html  css  js  c++  java
  • C# 观察者模式

    今天无意中看到这个模式,觉得挺有意思,所以把它记录下来。

    在观察者模式中,当被观察者发生变化时,所有的观察者都会得到通知,并且观察者会自动执行一些方法。

    观察者模式中,通常会有着四部分

    IObserver(观察者,里面会有个观察者执行的方法){void action();}

    ISubject(被观察者,有将观察者添加到容器中的方法){void Notify(); void Register(); void UnRegister();}

    Observer:IObserver(通常有很多个){}

    Subject:Isubject(通常只有一个这个类){}

    =================================================================

    下面是实例代码:参考自:http://blog.csdn.net/lijunchen1007/article/details/4404806

    public interface ISubject
    {
    void Notify();
    void Register(IObserver o);
    void UnRegister(IObserver o);
    }
    
    public interface IObserver
    {
    void Action();
    }
    
    public class Cat : ISubject
    {
    List<IObserver> list = new List<IObserver>();
    public void Notify()
    {
    foreach (IObserver item in list)
    {
    item.Action();
    }
    }
    
    public void Register(IObserver o)
    {
    list.Add(o);
    }
    
    public void UnRegister(IObserver o)
    {
    list.Remove(o);
    }
    public void Cry()
    {
    Console.WriteLine("猫叫了...");
    Notify();
    }
    }
    
    public class Mouse :IObserver
    {
    
    public void Action()
    {
    Console.WriteLine("老鼠逃跑了...");
    }
    }
    
    public class Master : IObserver {
    
    public void Action()
    {
    Console.WriteLine("主人醒了...");
    }
    }
    
    public class duck : IObserver
    {
    
    public void Action()
    {
    Console.WriteLine("鸭子醒了...");
    }
    }
    
    public class a
    
    {
    
    static void Main(string[] args)
    
    {
    
    Cat cat = new Cat();
    Mouse mouse = new Mouse();
    Master master = new Master();
    duck duck = new duck();
    cat.Register(mouse);
    cat.Register(master);
    cat.Register(duck);
    cat.Cry();
    
    }
    
    }
  • 相关阅读:
    Mysql 免密码登录,修改密码及忘记密码操作
    CentOS 6.9 升级MySQL 5.6.36到5.7.18
    【转载】详解布隆过滤器的原理、使用场景和注意事项
    AssemblyVersion、AssemblyFileVersion、AssemblyInformationalVersion 区别
    为什么要有财务自由【转】
    CacheManager.Core
    雪花算法,生成分布式唯一ID
    监控
    什么是并行、并发, 两者的区别是什么
    Emit用法
  • 原文地址:https://www.cnblogs.com/cindyLu/p/3182537.html
Copyright © 2011-2022 走看看