观察者模式Demo
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.ReadKey();
}
}
}
观察者模式Demo的更多相关文章
- 23种设计模式--观察者模式-Observer Pattern
一.观察者模式的介绍 观察者模式从字面的意思上理解,肯定有两个对象一个是观察者,另外一个是被观察者,观察者模式就是当被观察者发生改变得时候发送通知给观察者,当然这个观察者可以是多个对象,在项 ...
- java设计模式--事件监听器模式和观察者模式
监听器模式:事件源经过事件的封装传给监听器,当事件源触发事件后,监听器接收到事件对象可以回调事件的方法 观察者模式:观察者(Observer)相当于事件监听者,被观察者(Observable)相当于事 ...
- Android观察者模式的简单实现demo
观察者模式就是:当一个对象的状态发送改变时,所有依赖于它的对象都能得到通知并被自动更新. 下面介绍一种简单的使用方法,(下面有demo链接)先看一下project的目录构成: ObserverList ...
- Android设计模式---观察者模式小demo(一)
1,今天刚好看到了设计模式这一块来,而观察者模式是我一直想总结的,先来看看观察者模式的简单的定义吧 "当一个对象改变时,他的所有依赖者都会受到通知,并自动更新." 一般我们项目中就 ...
- MVVM与Backbone demo
MVVM https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93viewmodel
- 浅谈Java五大设计原则之观察者模式
定义一下观察者模式: 观察者模式又叫 发布-订阅 模式,定义的两个对象之间是一种一对多的强依赖关系,当一个对象的状态发生改变,所有依赖它的对象 将得到通知并自动更新(摘自Hand First). ...
- (六)观察者模式详解(包含观察者模式JDK的漏洞以及事件驱动模型)
作者:zuoxiaolong8810(左潇龙),转载请注明出处,特别说明:本博文来自博主原博客,为保证新博客中博文的完整性,特复制到此留存,如需转载请注明新博客地址即可. 本章我们讨论一个除前面的单例 ...
- 浅谈Adapter中观察者模式
首先让我们看一个客户端图片 这是京东客户端的购物车界面.有这么一种功能,当我们在商品列表中调整商品数量等信息的时候,下方的金额总数也随之变化. 可以看出,这个界面有一个数据源,一个适配器,一个List ...
- iOS中常见的设计模式——单例模式\委托模式\观察者模式\MVC模式
一.单例模式 1. 什么是单例模式? 在iOS应用的生命周期中,某个类只有一个实例. 2. 单例模式解决了什么问题? 想象一下,如果我们要读取文件配置信息,那么每次要读取,我们就要创建一个文件实例,然 ...
随机推荐
- Webform——购物车
购物车主要实现的功能: ①在主页面可以将所有商品显示出来,包括价格,库存. ②点击购买可以累加产品,如果是同一种产品,只会累加每种产品的数量. ③查看购物车,可以查看明细,包括所购物品的名称,价格,数 ...
- android Service Activity三种交互方式(付源码)
android SDK提供了Service,用于类似Linix守护进程或者windows的服务. Service有两种类型: 本地服务(Local Service):用于应用程序内部 远程服务(Rem ...
- linux tar 解压命令总结
把常用的tar解压命令总结下,当作备忘: tar -c: 建立压缩档案 -x:解压 -t:查看内容 -r:向压缩归档文件末尾追加文件 -u:更新原压缩包中的文件 这五个是独立的命令,压缩解压都要用到其 ...
- VS.NET2010水晶报表安装部署
水晶报表VS2010版IDE安装标准版SAP Crystal Reports, version for Visual Studio 2010 - Standard: 下载地址: http://down ...
- HDU 4195 Regular Convex Polygon
思路:三角形的圆心角可以整除(2*pi)/n #include<cstdio> #include<cstring> #include<iostream> #incl ...
- jQuery技术内幕电子版5
4. 转换HTML代码为DOM元素 先创建一个文档片段DocumentFragment,然后调用方法jQuery.clean(elems, context, frag-ment, scripts)将H ...
- Storm系列(六)架构分析之Scheduler-调度器[EventScheduler]
任务调度接口定义: 1 IScheduler{ 2 // conf为当前nimbus的stormp配置 3 void prepare(Map conf); // 初始化 4 // to ...
- HW4.3
public class Solution { public static void main(String[] args) { final double POUND_PER_KILOGRAM = 2 ...
- A list of base boxes for Vagrant - Vagrantbox.es
Create image server with nginx + lua (Openresty) + graphicsmagick (Part I) | Ian's PhotograPhy Blog ...
- PC-信使服务之不用聊天软件也能通信
net send 192.168.1.2 OK 二台电脑都要开启messenger服务.