C#_观察者模式
假设有一个软件公司,每当有新产品推出,就把信息通知到一些客户。
把通知这个动作抽象成一个接口。
public interface IService
{
void Notif();
}
客户如果想获得通知,就需要实现以上的接口。这里的客户被看作是观察者。
public class CustomerA : IService
{
public void Notif()
{
Console.WriteLine("客户A收到通知了~~");
}
}
public class CustomerB : IService
{
public void Notif()
{
Console.WriteLine("客户B收到通知了~~");
}
}
作为软件公司来讲,维护着一个客户的集合,并提供注册、取消注册的方法,往这个集合添加或删除客户。每当有通知的时候,就遍历客户集合,让IService执行通知。软件公司可以看作是一个被观察对象,或者说是发起动作的源头。
public class MyCompany
{
private IList<IService> subscribers = new List<IService>();
public void Subscribe(IService subscriber)
{
subscribers.Add(subscriber);
}
public void CancelSubscribe(IService subscriber)
{
subscribers.Remove(subscriber);
}
public void SendMsg()
{
foreach (IService service in subscribers)
{
service.Notif();
}
}
}
客户端创建软件公司实例、创建观察者实例、注册或取消观察者等。
class Program
{
static void Main(string[] args)
{
MyCompany company = new MyCompany();
IService customerA = new CustomerA();
IService customerB = new CustomerB();
company.Subscribe(customerA);
company.Subscribe(customerB);
company.SendMsg();
Console.ReadKey();
}
}
总结:
● 把一个通知的动作抽象成接口
● 观察者如果想接收到通知,就实现通知接口
● 被观察对象做3件事情:维护观察者的集合,注册/取消观察者,发起动作遍历观察者集合让通知接口来做事
C#_观察者模式的更多相关文章
- java_设计模式_观察者模式_Observer Pattern(2016-07-27)
看了好几篇文章,最终还是觉得<Head First 设计模式>举得例子比较符合观察者模式. 观察者模式概述: 观察者模式有时被称作发布/订阅模式,它定义了一种一对多的依赖关系,让多个观察者 ...
- 【GOF23设计模式】观察者模式
来源:http://www.bjsxt.com/ 一.[GOF23设计模式]_观察者模式.广播机制.消息订阅.网络游戏对战原理 package com.test.observer; import ja ...
- 观察者模式 vs 发布-订阅模式
我曾经在面试中被问道,_“观察者模式和发布订阅模式的有什么区别?” _我迅速回忆起“Head First设计模式”那本书: 发布 + 订阅 = 观察者模式 “我知道了,我知道了,别想骗我” 我微笑着回 ...
- 16.观察者模式(Observer Pattern)
动机(Motivate): 在软件构建 过程中,我们需要为某些对象建立一种“通知依赖关系” --------一个对象(目标对象)的状态发生改变,所有的依赖对象(观察者对象)都将得到通知.如果这 ...
- 谈谈JS的观察者模式(自定义事件)
呼呼...前不久参加了一个笔试,里面有一到JS编程题,当时看着题目就蒙圈...后来研究了一下,原来就是所谓的观察者模式.就记下来...^_^ 题目 [附加题] 请实现下面的自定义事件 Event 对象 ...
- JS实现Observable观察者模式
欢迎讨论与交流 : ) 注 代码参考自——汇智网 RxJS教程 前言 Observable观察者模式令小白笔者眼前一亮.数据生产者(observable)负责生产新鲜的数据,同时在生产完毕后'通知“消 ...
- observer观察者模式
观察者模式(有时又被称为发布-订阅Subscribe>模式,观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象,这个主题对象在状态上发生变化时,会通知所有观察者对象,让 ...
- 观察者模式在ng(Angular)中的应用
在这个前端框架满天飞的天下,angular MVVM 的模式确实火了一把,所以最近一直在学习ng,感悟颇多,填坑无数,今天终静下心来打算更新自己久未变动的博客,做一做总结. 1.在ng中的观察者模式: ...
- JavaScript设计模式之观察者模式(学习笔记)
设计模式(Design Pattern)对于软件开发来说其重要性不言而喻,代码可复用.可维护.可扩展一直都是软件工程中的追求!对于我一个学javascript的人来说,理解设计模式似乎有些困难,对仅切 ...
随机推荐
- hnu Counting ones 统计1-n 二进制中1的个数
Counting ones Time Limit: 1000ms, Special Time Limit:2500ms, Memory Limit:65536KB Total submit users ...
- hdu 1999 不可摸数 水题。
不可摸数 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
- 2016年10月18日 星期二 --出埃及记 Exodus 19:2
2016年10月18日 星期二 --出埃及记 Exodus 19:2 After they set out from Rephidim, they entered the Desert of Sina ...
- Ubuntu安装后的一些配置
对新安装的Ubuntu的一些配置: #移除无用包 apt-get remove libreoffice-common apt-get remove unity-webapps-common apt-g ...
- 【Linux】用less查看日志文件
一般程序部署在Linux环境,查看日志时,一般用less满足大部分的需求. 列举.记录最常用的场景,代码以Tomcat日志文件catalna.out为例. > 直接查看文件 less catal ...
- HTML基础 整理
HTML:超文本传输协议 (Hyper Markup Language) CSS:网页美化 (Cascading Style Sheets) JS:java-scipt 脚本语言 Dreamweave ...
- 【转载】20分钟MySQL基础入门
原文:20分钟MySQL基础入门 这里持续更新修正 开始使用 MySQL 为关系型数据库(Relational Database Management System),一个关系型数据库由一个或数个表格 ...
- 【转载】为什么CPU有多层缓存
原文:为什么CPU有多层缓存 http://mp.weixin.qq.com/s?__biz=MzI1NDM2Nzg5Mw==&mid=2247483712&idx=1&sn= ...
- WebRTC的学习(二)
英文原文的链接地址为:https://developer.mozilla.org/en-US/docs/Web/API/WebRTC_API/Overview WebRTC是由一些关联的API和协议一 ...
- R语言保存文件 Error in save error writing to connection
Error in save(filtered, file = paste(sampleName, "filtered", sep = "_")) : err ...