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);
                }
            }
  • 相关阅读:
    92 log4j日志记录
    35 反射封装占位
    34 jdbc工具封装
    33 mysql约束的增删
    32 Dao层和impl层
    31 jdbc查询,javaBean引入
    30 jdbc事务设置
    29 jdbc连接带数据操作 模板(直接复制来用)
    28 jdbc驱动包导入java项目及连接数据库流程
    27 MySQL与Oracle在语法上的一些不同点
  • 原文地址:https://www.cnblogs.com/yxlblogs/p/3833919.html
Copyright © 2011-2022 走看看