简单的观察者模式示例分享
时间:2023-02-11 12:52:12
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#,观察者模式
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
Android使用GPS获取用户地理位置并监听位置变化的方法
2022-03-29 14:24:17
![](https://img.aspxhome.com/file/2023/8/92628_0s.png)
java(包括springboot)读取resources下文件方式实现
2021-06-03 20:16:06
![](https://img.aspxhome.com/file/2023/4/68184_0s.png)
浅析C#中的Main(String[] args)参数输入问题
2023-08-13 01:45:58
![](https://img.aspxhome.com/file/2023/3/74813_0s.jpg)
详解Android如何实现阴影效果
2022-04-14 13:11:16
![](https://img.aspxhome.com/file/2023/0/139430_0s.png)
Android根据电话号码获得联系人头像实例代码
2022-01-07 04:08:10
一文带你了解Java万物之基之Object类
2023-10-09 01:58:28
![](https://img.aspxhome.com/file/2023/9/67119_0s.png)
java中的FileInputStream三种read()函数用法
2021-10-27 23:01:21
![](https://img.aspxhome.com/file/2023/8/103838_0s.png)
AndroidStudio修改Code Style来格式化自定义标签的xml文件方式
2023-08-07 00:43:21
![](https://img.aspxhome.com/file/2023/5/128945_0s.jpg)
Java实现简单QQ聊天工具
2023-11-25 05:54:52
![](https://img.aspxhome.com/file/2023/0/60130_0s.jpg)
Android 媒体开发之MediaPlayer状态机接口方法实例解析
2023-04-20 06:53:22
![](https://img.aspxhome.com/file/2023/3/139413_0s.gif)
Java使用设计模式中的工厂方法模式实例解析
2021-12-07 03:57:49
![](https://img.aspxhome.com/file/2023/4/61054_0s.jpg)
C#实现创建,删除,查找,配置虚拟目录实例详解
2022-09-27 06:38:16
Spring集成jedis的配置与使用简单实例
2023-07-02 04:11:39
Android消息机制Handler的工作过程详解
2023-07-31 13:49:03
![](https://img.aspxhome.com/file/2023/5/85965_0s.jpg)
spring boot配置多个请求服务代理的完整步骤
2023-03-30 10:30:49
![](https://img.aspxhome.com/file/2023/0/110890_0s.png)
Java Timer使用讲解
2023-11-28 20:30:33
C#简单输出日历的方法
2023-11-13 05:56:10
![](https://img.aspxhome.com/file/2023/3/68083_0s.jpg)
C#将制定目录文件名转换成大写的方法
2022-10-03 19:46:36
Java序列化和反序列化示例介绍
2023-11-25 04:24:26
java Spring Boot 配置redis pom文件操作
2022-01-25 20:57:13