简单的观察者模式示例分享
简单的观察者模式示例分享
发布时间:2016-12-28 来源:查字典编辑
摘要:复制代码代码如下:usingSystem;usingSystem.Collections.Generic;namespaceDemo{#re...

复制代码 代码如下:

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

}

}

}

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新C#教程学习
热门C#教程学习
编程开发子分类