用最简单的例子理解观察者模式(Observer Pattern)
假设有一个软件公司,每当有新产品推出,就把信息通知到一些客户。
把通知这个动作抽象成一个接口。
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件事情:维护观察者的集合,注册/取消观察者,发起动作遍历观察者集合让通知接口来做事
用最简单的例子理解观察者模式(Observer Pattern)的更多相关文章
- 用最简单的例子理解单例模式(Singleton Pattern)
当从应用程序全局的角度来看,如果只允许类的一个实例产生,就可以考虑单例模式. □ 即时加载的单例模式 把类的实例赋值给类的一个静态字段. class Program { static void Mai ...
- 用最简单的例子理解适配器模式(Adapter Pattern)
中国足球的水平虽然不高,但实际上,在每个城市会有一批足球爱好者,他们踢球.看球.懂球.有这样的2个足球爱好者,一个是左脚选手,另一个是右脚选手. public class PlayWithLeft { ...
- 最简单的例子理解Javascript闭包
理解Javascript的闭包非常关键,本篇试图用最简单的例子理解此概念. function greet(sth){ return function(name){ console.log(sth + ...
- 用最简单的例子理解对象为Null模式(Null Object Pattern)
所谓的"对象为Null模式",就是要求开发者考虑对象为Null的情况,并设计出在这种情况下的应对方法. 拿"用最简单的例子理解策略模式(Strategy Pattern) ...
- 设计模式 - 观察者模式(Observer Pattern) 详细说明
观察者模式(Observer Pattern) 详细说明 本文地址: http://blog.csdn.net/caroline_wendy/article/details/26583157 版权全部 ...
- 乐在其中设计模式(C#) - 观察者模式(Observer Pattern)
原文:乐在其中设计模式(C#) - 观察者模式(Observer Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 观察者模式(Observer Pattern) 作者:weba ...
- 设计模式 - 观察者模式(Observer Pattern) 详细解释
观察者模式(Observer Pattern) 详细解释 本文地址: http://blog.csdn.net/caroline_wendy/article/details/26583157 版权全部 ...
- 设计模式-观察者模式(Observer Pattern)
观察者模式(Observer Pattern):定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象.这个主题对象在状态发生变化时,会通知所有观察者对象,使他们能够自动更新自己. 观察者 ...
- jQuery中的观察者模式(Observer Pattern)
在jQuery中,on方法可以为元素绑定事件,trigger方法可以手动触发事件,围绕这2个方法,我们来体验jQuery中的观察者模式(Observer Pattern). ■ on方法绑定内置事件, ...
随机推荐
- SQL SERVER 收缩数据库的命令
--备份数据库 BACKUP DATABASE testdb TO DISK='d:\data\testdb20070906.bak' --清空日志 DUMP TRANSACTION testdb W ...
- java遍历ftp文件夹下所有文件(或指定文件下的文件)
import java.io.IOException; import java.io.PrintWriter; import java.util.ArrayList; import org.apach ...
- Python *args **kw
当函数的参数不确定时,可以使用*args 和**kwargs,*args 没有key值,**kwargs有key值. *args def fun_var_args(farg, *args): prin ...
- CVE-2013-0025
Microsoft IE ‘SLayoutRun’释放后重用漏洞(CNNVD-201302-197) Microsoft Internet Explorer是微软Windows操作系统中默认捆绑的WE ...
- php取得当前时间函数
php取得当前时间函数文章提供了php的几种获取当前时间的函数,date,time等哦,同时告诉我如何解决时区问题哦. php获取当前时间 使用函式 date() 实现 <?php echo $ ...
- Kotlin尝试
Kotlin 是一种静态类型的编程语言,可在 Java 虚拟机上运行,也可以编译为 JavaScript 源代码.其主要发展来自位于俄罗斯圣彼得堡的 JetBrains 程序员团队.虽然语法与 Jav ...
- winform框架源码-Devexpress开发框架
链接: https://pan.baidu.com/s/1TnDj6qftGEUl3sTB8QXs_w 提取码: 关注公众号[GitHubCN]回复获取 开发模式:C/S C/S采用的是dev14 ...
- day1作业二:多级菜单操作(函数实现)
作业二:多级菜单 (1)三级菜单 (2)可以次选择进入各子菜单 (3)所需新知识点:列表.字典 要求:输入back返回上一层,输入quit退出整个程序 本示例的三级菜单是一个yaml文件格式,格式如下 ...
- 2017-2018 ACM-ICPC, NEERC, Moscow Subregional Contest B - Byteland Trip dp
B - Byteland Trip 题目大意:给你一个由'<' 和 '>'组成的串, 如果在'<' 只能前往编号比它小的任意点, 反之只能前往比它大的任意点,问你能遍历所有点 并且每 ...
- Cordova 打包签名
1.第一步 在项目根目录下运行命令cordova build --release android,会在testApp\platforms\android\build\outputs\apk目录下生成一 ...