• 设计模式观察者模式


    /// <summary>
        
    /// 媒体信息,Subject对象
        
    /// </summary>
        public interface IMedia
        {
            void AddSubscriber(ISubscribr ssb);

            void RemoveSubscriber(ISubscribr ssb);

            /// <summary>
            
    /// 有新的媒体信息来了,通知订阅者
            
    /// </summary>
            void Update();
        }

        /// <summary>
        
    /// 游戏媒体信息,Subject对象
        
    /// </summary>
        public class GameMedia : IMedia
        {
            private List<ISubscribr> lstSsb = new List<ISubscribr>();

            public void AddSubscriber(ISubscribr ssb)
            {
                lstSsb.Add(ssb);
            }

            public void RemoveSubscriber(ISubscribr ssb)
            {
                lstSsb.Remove(ssb);
            }

            public void Update()
            {
                foreach (var item in lstSsb)
                {
                    item.Handle("魔兽十大经典战役视频开放下载!");
                }
            }
        }

        /// <summary>
        
    /// 体育新闻
        
    /// </summary>
        public class SportsMedia : IMedia
        {
            List<ISubscribr> lstSsb = new List<ISubscribr>();

            public void AddSubscriber(ISubscribr ssb)
            {
                lstSsb.Add(ssb);
            }

            public void RemoveSubscriber(ISubscribr ssb)
            {
                lstSsb.Remove(ssb);
            }

            public void Update()
            {
                foreach (var item in lstSsb)
                {
                    item.Handle("今天中国夺得第13枚金牌!");
                }
            }
        }


        /// <summary>
        
    /// 订阅者,Observer对象
        
    /// </summary>
        public interface ISubscribr
        {
            /// <summary>
            
    /// 订阅者开始处理媒体信息:阅读,记录,或者扔掉
            
    /// </summary>
            
    /// <param name="msg"></param>
            void Handle(string msg);
        }

        public class RssSubsriber : ISubscribr
        {
            public void Handle(string msg)
            {
                Console.WriteLine("RSS订阅者正在阅读信息:" + msg);
            }
        }

        public class MobileSubscriber : ISubscribr
        {

            public void Handle(string msg)
            {
                Console.WriteLine("手机订阅者正在阅读信息:" + msg);
            }
        }


     public static void ObserverPattern()
            {
                //消息源,即subject
                IMedia gameMedia = new GameMedia();
                IMedia sportsMedia = new SportsMedia();

                //订阅者,即observer
                
    //rss 订阅了游戏和运动消息
                ISubscribr rss = new RssSubsriber();
                gameMedia.AddSubscriber(rss);
                sportsMedia.AddSubscriber(rss);
                //手机订阅者订阅了运动信息
                ISubscribr mobile = new MobileSubscriber();
                sportsMedia.AddSubscriber(mobile);

                //消息更新了,通知相关订阅者
                gameMedia.Update();
                sportsMedia.Update();

                //说明:观察者模式类似一种消息通知机制,一组对象GroupA对另一组对象GroupB表示关注,
                
    //需要在GroupB状态变化时自身有所反应,这时就可以使用观察者模式。
                
    //类似的应用:1,消息通知。2,异常监控
            }
  • 相关阅读:
    新增图表控件
    chrome无法登陆账号,显示操作超时的解决方案
    VC调用Delphi对象接口
    MyBatis学习-映射文件标签篇(select、resultMap)
    MyBatis学习-入门篇
    Spring 后置处理器 PropertyPlaceholderConfigurer 类(引用外部文件)
    Spring 创建 IOC 容器时加载配置文件的几种方式
    Spring的监听器ContextLoaderListener
    通用分页工具类
    单例模式的几种写法
  • 原文地址:https://www.cnblogs.com/imap/p/2617969.html
Copyright © 2020-2023  润新知