zoukankan      html  css  js  c++  java
  • 设计模式-观察者模式

    //主题
    interface Subject
        {
            void Notify();
            string msg { get; set; }
            UpdateHandler Update { get; set; }
        }
        delegate void UpdateHandler();
        class ChildSubject : Subject
        {
            public UpdateHandler Update { get; set; }
            public string msg { get; set; }        
    
            public void Notify()
            {
                Update();
            }
        }
    //观察者       
    abstract class Observer
        {
            public string name;
            public Subject subject;
            public Observer(string _name, Subject _subject)
            {
                name = _name;
                subject = _subject;
            }
        }
        class Site: Observer
        {
            public Site(string _name, Subject _subject) : base(_name, _subject)
            {
            }
    
            public void RefreshSite()
            {
                Console.WriteLine("{0},{1}需要同步更新", subject.msg,name);
            }
        }
        class App: Observer
        {
            public App(string _name, Subject _subject) : base(_name, _subject)
            {
            }
            //方法名称不一样,所以抽象没意义
            public void RefreshApp()
            {
                Console.WriteLine("{0},{1}需要同步更新", subject.msg, name);
            }
        }
            //前端
            static void Main(string[] args)
            {
                Subject subject = new ChildSubject();
                Site site = new Site("电脑网站", subject);
                App app = new App("手机APP", subject);
                subject.msg = "数据库被更新了";
                subject.Update += site.RefreshSite;
                subject.Update += app.RefreshApp;
                subject.Notify();
                Console.ReadLine();
            } 
    

    总结:观察者模式适用于某个对象发生变化后会引起其他对象发生连锁反应的情况下,(两个类有依赖关系的情况下)。
    设计模式-观察者模式

    转载于:https://blog.51cto.com/5591787/2115769

  • 相关阅读:
    Ubuntu12.04 亮度调节和保存
    算法
    Python一些常见问题的解决方法
    数据结构
    C# 运行时编译代码并执行 【转】
    C# 动态添加属性 非原创 有修改
    30天学通Visual C++项目案例开发 下載
    .NET常用Request获取信息
    获取一个目录下所有的文件,包括子目录的
    C++入门到精通_全集下载
  • 原文地址:https://www.cnblogs.com/twodog/p/12136922.html
Copyright © 2011-2022 走看看