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

代码如下:

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();
        }
    }
}

(0)

相关推荐

  • C# 观察者模式实例介绍

    观察者模式 观察者模式:定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主体对象,这个主题对象在状态发生变化时,会通知所有观察者.当一个对象改变需要同时改变其他对象,而且他不知道具体有多少对象需要改变的时候,应该考虑使用观察者模式. 观察者结构图: 使用场景:老板回来通知员工需要进入工作状态. 定义观察者的抽象类: 复制代码 代码如下: abstract class Observer { protected string name; protected ISubject sub; pu

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

    复制代码 代码如下: using System;using System.Collections.Generic; namespace Demo{    #region 抽象层,定义了观察者模式    /// <summary>    /// (抽象)新闻    /// </summary>    public interface INews    {        void SubScribe(ISubscriber s);        void UnSubScribe(ISu

  • 一个简单MVC5 + EF6示例分享

    本文所使用的软件及环境: Visual Studio Ultimate 2013; MVC5 + EF6 + .NET Framework 4.5 + LocalDB;Windows 7 x64 Professional 说明: 1.在EF (Entity Framework,以下简称EF6)框架下,操作数据的方式有三种:Database First, Model First, 以及 Code First,本文基于Code First创建. 2.本文是基于MVC5创建: 3.LocalDB Lo

  • PHP观察者模式原理与简单实现方法示例

    本文实例讲述了PHP观察者模式原理与简单实现方法.分享给大家供大家参考,具体如下: 当一个对象状态发生改变后,会影响到其他几个对象的改变,这时候可以用观察者模式.像wordpress这样的应用程序中,它容外部开发组开发插件,比如用户授权的博客统计插件.积分插件,这时候可以应用观察者模式,先注册这些插件,当用户发布一篇博文后,就回自动通知相应的插件更新. 观察者模式符合接口隔离原则,实现了对象之间的松散耦合. 观察者模式UML图: 在php SPL中已经提供SplSubject和SqlOberve

  • Android实现的简单蓝牙程序示例

    本文实例讲述了Android实现的简单蓝牙程序.分享给大家供大家参考,具体如下: 我将在这篇文章中介绍了的Android蓝牙程序.这个程序就是将实现把手机变做电脑PPT播放的遥控器:用音量加和音量减键来控制PPT页面的切换. 遥控器服务器端 首先,我们需要编写一个遥控器的服务器端(支持蓝牙的电脑)来接收手机端发出的信号.为了实现这个服务器端,我用到了一个叫做Bluecove(专门用来为蓝牙服务的!)的Java库. 以下是我的RemoteBluetoothServer类: public class

  • android 通过MediaRecorder实现简单的录音示例

    整理文档,搜刮出一个android 通过MediaRecorder实现简单的录音示例,稍微整理精简一下做下分享. MainActivity package com.centaur.collectvoice; import android.media.MediaRecorder; import android.os.Environment; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; impo

  • Python编程实现的简单神经网络算法示例

    本文实例讲述了Python编程实现的简单神经网络算法.分享给大家供大家参考,具体如下: python实现二层神经网络 包括输入层和输出层 # -*- coding:utf-8 -*- #! python2 import numpy as np #sigmoid function def nonlin(x, deriv = False): if(deriv == True): return x*(1-x) return 1/(1+np.exp(-x)) #input dataset x = np.

  • Angular实现的简单定时器功能示例

    本文实例讲述了Angular实现的简单定时器功能.分享给大家供大家参考,具体如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>www.jb51.net Angular定时器</title> <script src="angular.min.js"></scrip

  • JS使用setInterval实现的简单计时器功能示例

    本文实例讲述了JS使用setInterval实现的简单计时器功能.分享给大家供大家参考,具体如下: 使用setInterval实现计时,并且满60秒向分钟进一,满60分钟向小时进一. <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>www.jb51.net JS计时器</title> <script> window.onload =

  • Java使用Jdbc连接Oracle执行简单查询操作示例

    本文实例讲述了Java使用Jdbc连接Oracle执行简单查询操作.分享给大家供大家参考,具体如下: Java Jdbc 连接 Oracle 执行简单查询示例: package com.test.dbtest; import java.sql.CallableStatement; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLExce

  • PHP工厂模式简单实现方法示例

    本文实例讲述了PHP工厂模式简单实现方法.分享给大家供大家参考,具体如下: 工厂模式是一种类,建立了一个工厂来根据所需来创建对象,这种方式在多态性编程中是很重要的,允许动态替换类,修改配置等. php示例代码如下: //-----------------------------工厂模式-------------------------// class A{ public $class; // public $class = $_GET['c']; //类名 public $method; //

随机推荐