zoukankan      html  css  js  c++  java
  • 设计模式学习之观察者模式(Observer,行为型模式)(7)

    1.观察者模式又叫做发布-订阅模式。

    2.观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。

    3.使用观察者模式的好处:维护相关对象间的一致性。我们不希望为了维持一致性而使各类紧密耦合,这样会给维护、扩展和重用都带来不便。
    什么时候使用观察者模式:当一个对象的改变需要同时改变其他对象的时候,而且它不知道具体有多少对象有待改变时,应该考虑使用观察者模式。

    private static void Main(string[] args)
            {
                Boss boss = new Boss();
                boss.Update += new StockObserver("股票哥", boss).CloseStockMarket;
                boss.Update += new NBAObserver("NBA哥", boss).CloseNBADirectSeeding;
                boss.SubjectState = "老板回来了。。。";
                boss.Notify();
            }
    
    
            /// <summary>
            /// 通知者接口
            /// </summary>
            public interface ISubject
            {
                void Notify();
    
                string SubjectState { get; set; }
            }
    
            public delegate void EventHandler();
    
            public class Boss : ISubject
            {
                public event EventHandler Update;
    
                public void Notify()
                {
                    if (Update != null)
                    {
                        Update();
                    }
                }
    
                public string SubjectState { get; set; }
            }
    
            /// <summary>
            /// 前台秘书类
            /// </summary>
            public class Secretary : ISubject
            {
                public event EventHandler Update;
    
                public void Notify()
                {
                    if (Update != null)
                    {
                        Update();
                    }
                }
    
                public string SubjectState { get; set; }
            }
    
            /// <summary>
            /// 看股票的同事
            /// </summary>
            public class StockObserver
            {
                private string name;
                private ISubject subject;
    
                public StockObserver(string name, ISubject subject)
                {
                    this.name = name;
                    this.subject = subject;
                }
    
                public void CloseStockMarket()
                {
                    Console.WriteLine("{0} {1}  关闭股票行情,继续工作!", subject.SubjectState, name);
                }
            }
    
            /// <summary>
            /// 看NBA的同事
            /// </summary>
            public class NBAObserver
            {
                private string name;
                private ISubject subject;
    
                public NBAObserver(string name, ISubject subject)
                {
                    this.name = name;
                    this.subject = subject;
                }
    
                public void CloseNBADirectSeeding()
                {
                    Console.WriteLine("{0} {1}  关闭NBA直播,继续工作!", subject.SubjectState, name);
                }
            }
  • 相关阅读:
    前端 http协议 四大特性 web本质 -响应状态码 列表标签 表单操作 form表单 # 44 HTML
    断点传续 # 补充 mysql
    优酷系统 # 41-43
    css控制 只显示一行 强制不换行 超出用...表示
    点击返回上一页面
    jquery实现点击按钮变换背景颜色
    js,同意后,才可已点击注册按钮
    用div+css生存太极图案
    使用tp5,显示页面错误信息
    vue项目搭建步骤
  • 原文地址:https://www.cnblogs.com/yxlblogs/p/3833919.html
Copyright © 2011-2022 走看看