简单的观察者模式示例分享

 更新时间:2014年03月04日 09:36:03   作者:  
这篇文章主要介绍了简单的观察者模式示例,抽象层定义了观察者模式,实现层是对抽象层的具体实现,需要的朋友可以参考下

复制代码 代码如下:

using System;
using System.Collections.Generic;

namespace Demo
{
    #region 抽象层,定义了观察者模式
    /// <summary>
    /// (抽象)新闻
    /// </summary>
    public interface INews
    {
        void SubScribe(ISubscriber s);
        void UnSubScribe(ISubscriber s);
        void Publish(string newsTitle);   //在具体实现的过程中建立发布与订阅的联系
    }

    /// <summary>
    /// (抽象)订阅者
    /// </summary>
    public interface ISubscriber
    {
        void Read(string newsTitle);
    }
    #endregion

    #region 实现层,是对抽象层的具体实现
    /// <summary>
    /// (具体)新闻
    /// </summary>
    public class ITNews : INews
    {
        private List<ISubscriber> readers = new List<ISubscriber>();

        public void SubScribe(ISubscriber s)
        {
            readers.Add(s);
        }

        public void UnSubScribe(ISubscriber s)
        {
            if (readers.Count >= 0)
            {
                readers.Remove(s);
            }
        }

        public void Publish(string newsTitle)
        {
            foreach (ISubscriber i in readers)
            {
                i.Read(newsTitle);          //<<<<<发布的时候订阅>>>>>
            }
        }
    }

    /// <summary>
    /// (具体)订阅者
    /// </summary>
    public class Subscriber : ISubscriber
    {
        private string subscriber = string.Empty;
        public Subscriber(string subscriber)
        {
            this.subscriber = subscriber;
        }

        public void Read(string newsTitle)
        {
            Console.WriteLine(string.Format("{0}阅读了IT新闻\"{1}\"", subscriber, newsTitle));
        }
    }
    #endregion

    public class Pro
    {
        static void Main(string[] args)
        {
            ITNews news = new ITNews();
            Subscriber zs = new Subscriber("张三"),
                                 ls = new Subscriber("李四"),
                                 ww = new Subscriber("王五");

            news.SubScribe(zs);
            news.SubScribe(ls);
            news.SubScribe(ww);
            news.UnSubScribe(ls);  //张三取消订阅

            news.Publish("2014年移动电商攻坚战:阿里巴巴如何破局?");
            news.Publish("余额宝还能重回高收益率吗?");

            Console.WriteLine();
            Console.ReadKey();
        }
    }
}

您可能感兴趣的文章:

相关文章

  • unity实现手机端摇杆控制人物移动

    unity实现手机端摇杆控制人物移动

    这篇文章主要为大家详细介绍了unity实现手机端摇杆控制人物移动,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-04-04
  • c#使用EPPlus封装excel表格导入功能的问题

    c#使用EPPlus封装excel表格导入功能的问题

    这篇文章主要介绍了c#使用EPPlus封装excel表格导入功能的问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-04-04
  • 分享用于操作FTP的客户端C#类

    分享用于操作FTP的客户端C#类

    用.net自带的FtpWebRequest做的ftp客户端得程序,有一个功能实现起来会非常苦难,就是移动文件和文件夹的功能。所以后来又找了一个类,用socket实现的,发现比用ftpWebRequest功能要强。基本的ftp客户端得命令都实现了。
    2015-05-05
  • asp.net中调用oracle存储过程的方法

    asp.net中调用oracle存储过程的方法

    存储过程是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出参数来执行它,下面给大家介绍下asp.net中调用oracle存储过程的方法,需要的朋友可以参考下
    2015-08-08
  • C#正则表达式大全

    C#正则表达式大全

    本文详细讲解了C#正则表达式的用法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-04-04
  • c#中Empty()和DefalutIfEmpty()用法分析

    c#中Empty()和DefalutIfEmpty()用法分析

    这篇文章主要介绍了c#中Empty()和DefalutIfEmpty()用法,以实例形式分析了针对不同情况下Empty()和DefalutIfEmpty()用法区别,需要的朋友可以参考下
    2014-11-11
  • 在C#中添加I/O延时和持续时间的实现方法

    在C#中添加I/O延时和持续时间的实现方法

    这篇文章主要介绍了在C#中添加I/O延时和持续时间的实现方法,文中有相关的代码示例供大家参考,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
    2025-01-01
  • c# 类型构造器

    c# 类型构造器

    CLR还支持类型构造器,也称为静态构造器。c#类型构造器可应用引用类型和值类型,永远没有参数
    2012-10-10
  • C#接口归纳总结实例详解

    C#接口归纳总结实例详解

    本篇文章通过实例代码对接口做了详解,需要的朋友可以参考下
    2017-04-04
  • 详解C# 线程的挂起与唤醒

    详解C# 线程的挂起与唤醒

    这篇文章主要介绍了详解C# 线程的挂起与唤醒,帮助大家更好的理解和学习使用c#,感兴趣的朋友可以了解下
    2021-05-05

最新评论