• 观察者模式


    namespace ObserverInNET
    {
        class Program
        {
            // 委托充当订阅者接口类
            public delegate void NotifyEventHandler(object sender);
    
            // 抽象订阅号类
            public class TenXun
            {
                public NotifyEventHandler NotifyEvent;
    
                public string Symbol { get; set; }
                public string Info { get; set; }
                public TenXun(string symbol, string info)
                {
                    this.Symbol = symbol;
                    this.Info = info;
                }
    
                #region 新增对订阅号列表的维护操作
                public void AddObserver(NotifyEventHandler ob)
                {
                    NotifyEvent += ob;
                }
                public void RemoveObserver(NotifyEventHandler ob)
                {
                    NotifyEvent -= ob;
                }
    
                #endregion
    
                public void Update()
                {
                    if (NotifyEvent != null)
                    {
                        NotifyEvent(this);
                    }
                }
            }
    
            // 具体订阅号类
            public class TenXunGame : TenXun
            {
                public TenXunGame(string symbol, string info)
                    : base(symbol, info)
                {
                }
            }
    
            // 具体订阅者类
            public class Subscriber
            {
                public string Name { get; set; }
                public Subscriber(string name)
                {
                    this.Name = name;
                }
    
                public void ReceiveAndPrint(Object obj)
                {
                    TenXun tenxun = obj as TenXun;
    
                    if (tenxun != null)
                    {
                        Console.WriteLine("Notified {0} of {1}'s" + " Info is: {2}", Name, tenxun.Symbol, tenxun.Info);
                    }            
                }
            }
    
            static void Main(string[] args)
            {
                TenXun tenXun = new TenXunGame("TenXun Game", "Have a new game published ....");
                Subscriber lh =  new Subscriber("Learning Hard");
                Subscriber tom =  new Subscriber("Tom");
    
                // 添加订阅者
                tenXun.AddObserver(new NotifyEventHandler(lh.ReceiveAndPrint));
                tenXun.AddObserver(new NotifyEventHandler(tom.ReceiveAndPrint));
    
                tenXun.Update();
    
                Console.WriteLine("-----------------------------------");
                Console.WriteLine("移除Tom订阅者");
                tenXun.RemoveObserver(new NotifyEventHandler(tom.ReceiveAndPrint));
                tenXun.Update();
    
                Console.ReadLine();
            }
        }
    }
  • 相关阅读:
    [LeetCode] 56. Merge Intervals 解题思路
    [LeetCode] 128. Longest Consecutive Sequence 解题思路
    [LeetCode] Subsets I (78) & II (90) 解题思路,即全组合算法
    linux安装PHP7以及扩展
    php安装composer
    细说PHP中strlen和mb_strlen的区别
    mysql一些简单操作
    mysql数据库使用Navicat时向Navicat导入sql文件时某字段过大时的处理
    JS中||的某些用法
    PHP验证身份信息
  • 原文地址:https://www.cnblogs.com/gaocong/p/6824627.html
Copyright © 2020-2023  润新知