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的人来说,理解设计模式似乎有些困难,对仅切 ...
随机推荐
- Unity5 Standard自发光材质无效解决方法
受光物和发光物都要勾选Static才会有效. 如果不够选静态就是用HDR光照,需要相机勾选HDR 所以如果是动态的物体真实发光,Unity依旧无法支持
- [转]Unity: make your lists functional with ReorderableList
原文地址:http://va.lent.in/unity-make-your-lists-functional-with-reorderablelist/ This article is reprod ...
- hbase centOS生产环境配置笔记 (1 NameNode, 1 ResourceManager, 3 DataNode)
本次是第一次在生产环境部署HBase,本文若有配置上的不妥之处还请高手指正. hadoop版本:hadoop-2.4.1 HBase版本:hbase-0.98.6.1-hadoop2 Zookeepe ...
- reactnativemodal
'use strict'; var React = require('react-native'); var Modal = require('react-native-modal'); var { ...
- Maven项目的目录结构+maven的安装与配置
1.首先下载maven,然后配置环境变量,在MyEclipse里面配置maven 2.配置maven的pom.xml文件 3.下载和更新资源 右击项目,有一个Maven4Myeclipse,里面有三个 ...
- Oracle中创建用户和授权
默认的:最高权限用户:SYSTEM 密码:MANAGER 管理员权限用户:SYS 密码:CHANGE_ON_INSTALL 普通用户:SCOTT 密码:TIGER 登 陆管理员或超级管理员用户可以自己 ...
- UE4简单AI
首先做个小小的声明把,由于俺之前也没接触过AI ,所以有一些专业的词汇可能翻译存在各种问题,如果你发现的话,还是希望能够提出来哦,我们一起进步. 记住配合视频食用更佳哦~ 视频连接:http://ww ...
- SetWindowHookEx 做消息响应
HHOOK g_Hook = NULL; LRESULT CALLBACK CallWndProc( _In_ int nCode, _In_ WPARAM wParam, _In_ LPARAM l ...
- Mac功夫——OS X应用技巧
看过不少文章说Mac是了不起的先进操作系统,爱折腾的我,经不住诱惑,也玩起了Mac,用惯了Windows,突然换到Mac下还真是十分不习惯,就连复制粘贴这种简单操作也觉得很是别扭. 用过一段时间才感觉 ...
- Excel2003命令栏操作
Excel2003个人觉得应该把它抛掉不管了,但还是没忍住想看下它里面的东东. 一.先列出一些重要对象 Commandbars:命令栏集合 ...