簡(jiǎn)單的觀察者模式示例分享
更新時(shí)間:2014年03月04日 09:36:03 作者:
這篇文章主要介紹了簡(jiǎn)單的觀察者模式示例,抽象層定義了觀察者模式,實(shí)現(xiàn)層是對(duì)抽象層的具體實(shí)現(xiàn),需要的朋友可以參考下
復(fù)制代碼 代碼如下:
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); //在具體實(shí)現(xiàn)的過程中建立發(fā)布與訂閱的聯(lián)系
}
/// <summary>
/// (抽象)訂閱者
/// </summary>
public interface ISubscriber
{
void Read(string newsTitle);
}
#endregion
#region 實(shí)現(xiàn)層,是對(duì)抽象層的具體實(shí)現(xiàn)
/// <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); //<<<<<發(fā)布的時(shí)候訂閱>>>>>
}
}
}
/// <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年移動(dòng)電商攻堅(jiān)戰(zhàn):阿里巴巴如何破局?");
news.Publish("余額寶還能重回高收益率嗎?");
Console.WriteLine();
Console.ReadKey();
}
}
}
您可能感興趣的文章:
相關(guān)文章
unity實(shí)現(xiàn)手機(jī)端搖桿控制人物移動(dòng)
這篇文章主要為大家詳細(xì)介紹了unity實(shí)現(xiàn)手機(jī)端搖桿控制人物移動(dòng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-04-04
c#使用EPPlus封裝excel表格導(dǎo)入功能的問題
這篇文章主要介紹了c#使用EPPlus封裝excel表格導(dǎo)入功能的問題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-04-04
asp.net中調(diào)用oracle存儲(chǔ)過程的方法
存儲(chǔ)過程是在大型數(shù)據(jù)庫系統(tǒng)中,一組為了完成特定功能的SQL 語句集,存儲(chǔ)在數(shù)據(jù)庫中經(jīng)過第一次編譯后再次調(diào)用不需要再次編譯,用戶通過指定存儲(chǔ)過程的名字并給出參數(shù)來執(zhí)行它,下面給大家介紹下asp.net中調(diào)用oracle存儲(chǔ)過程的方法,需要的朋友可以參考下2015-08-08
c#中Empty()和DefalutIfEmpty()用法分析
這篇文章主要介紹了c#中Empty()和DefalutIfEmpty()用法,以實(shí)例形式分析了針對(duì)不同情況下Empty()和DefalutIfEmpty()用法區(qū)別,需要的朋友可以參考下2014-11-11
在C#中添加I/O延時(shí)和持續(xù)時(shí)間的實(shí)現(xiàn)方法
這篇文章主要介紹了在C#中添加I/O延時(shí)和持續(xù)時(shí)間的實(shí)現(xiàn)方法,文中有相關(guān)的代碼示例供大家參考,對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2025-01-01

