【返回目录】

我们常常听说“联合国军事观察员”这个名词,那么军事观察员到底是做什么的呢?

太多细节其实我们这些当老百姓的没有必要也不可能知道,我们只需要知道,军事观察员就是联合国派驻到某些政局比较动荡、到处战乱纷扰的危险地带起到对局势进行观察和上报作用的联合国军事工作人员。比如,乌干达证据不太稳定,随时可能爆发内战,进而可能升级导致种族大屠杀,这是人类社会不愿看到的悲剧。于是联合国派遣由中美两名军事观察员组成的观察团进驻乌干达,一旦局势发生变化就立即向上级部门报告。这也就是观察者模式。

   1: using System;
   2: using System.Collections;
   3:  
   4: namespace Autumoon.DesignPatterns.Observer
   5: {
   6:     public class Country
   7:     {
   8:         public string Name { get; set; }
   9:         public string Status { get; set; }
  10:         private ArrayList _observers = null;
  11:  
  12:         public Country()
  13:         {
  14:             this.Status = "No War.";
  15:             this._observers = new ArrayList();
  16:         }
  17:  
  18:         public void Attach(ObserverDemo observer)
  19:         {
  20:             this._observers.Add(observer);
  21:             observer.ObservedCountry = this;
  22:         }
  23:  
  24:         public void Detach(ObserverDemo observer)
  25:         {
  26:         }
  27:  
  28:         public void Notify()
  29:         {
  30:             foreach (ObserverDemo observer in this._observers)
  31:             {
  32:                 observer.Update();
  33:             }
  34:         }
  35:     }
  36:  
  37:     public class ConcreteCountry : Country
  38:     {
  39:         public string State { get; set; }
  40:     }
  41:  
  42:     abstract public class ObserverDemo
  43:     {
  44:         public Country ObservedCountry { get; set; }
  45:  
  46:         abstract public void Update();
  47:     }
  48:  
  49:     public class ConcreteObserver : ObserverDemo
  50:     {
  51:         public string Name { get; set; }
  52:  
  53:         public ConcreteObserver(string name)
  54:         {
  55:             this.Name = name;
  56:         }
  57:  
  58:         override public void Update()
  59:         {
  60:             Console.WriteLine(this.Name + ": " + this.ObservedCountry.Status);
  61:         }
  62:     }
  63: }

如果乌干达没发生什么事情倒也罢,一旦有任何情况,观察员都必须跟上级部门报告,而不是坐山观虎斗。

   1: static void Main(string[] args)
   2: {
   3:     #region Observer
   4:     ConcreteCountry country = new ConcreteCountry();
   5:     country.Name = "Uganda";
   6:  
   7:     ConcreteObserver chineseObserver = new ConcreteObserver("Chinese observer");
   8:     ConcreteObserver americanObserver = new ConcreteObserver("American observer");
   9:  
  10:     country.Attach(chineseObserver);
  11:     country.Attach(americanObserver);
  12:  
  13:     country.Status = "There's no war.";
  14:     country.Notify();
  15:  
  16:     country.Status = "There's some sound of gun in somewhere.";
  17:     #endregion
  18:  
  19:     Console.ReadLine();
  20: }

4.7 Observer(观察者)相关推荐

  1. [译]RxJS文档04——Observer 观察者

    原文: http://reactivex.io/rxjs/manu... 什么是Observer? 观察者(Observer)是Observable流推送数据的用户.观察者们(Observers)就是 ...

  2. Observer观察者设计模式

    目录 问题 程序模拟 版本一:while死循环 版本二:面向对象式地傻等 版本三:加入观察者 版本四:加入多个观察者 版本五:分离观察者与被观察者 版本六:观察者根据事件来作出处理 版本七:处理事件需 ...

  3. boost::contract模块实现observer观察者的测试程序

    boost::contract模块实现observer观察者的测试程序 实现功能 C++实现代码 实现功能 boost::contract模块实现observer观察者的测试程序 C++实现代码 #i ...

  4. Observer(观察者)模式的代码演示

    关于什么是Observer(观察者)模式,它的原理是什么,我不擅长理论知识的说明,这里通过一个简单有趣的小例子来给大家演示,相信大家看完之后,就会很明白了. 现在假设:一个小孩子在睡觉,睡醒后要他父亲 ...

  5. Angular RxJS入门笔记 (Observable可观察对象、Subscribe订阅、Observer观察者、Subscription对象)

    RxJS入门笔记,关于Observable可观察对象.Observer观察者.Subscribe订阅,Subscription Observable可观察对象 Observer观察者 总结整体 本笔记 ...

  6. 设计模式之Observer(观察者)模式

    需求: 有一个报社,用户可以随时订阅报纸,也可以随时取消订阅.当每天的新闻来的时候,报社用邮递员投递给订阅了报纸的用户.订阅者有老人.小孩和青年. 分析: 报社相当于被观察的对象,用户相当于观察者,一 ...

  7. 设计模式学习笔记——观察者(Observer)模式

    设计模式学习笔记--观察者(Observer)模式 @(设计模式)[设计模式, 观察者模式, Observer] 设计模式学习笔记观察者Observer模式 基本介绍 观察者案例 类图 实现代码 Ob ...

  8. 设计模式:观察者模式--Observer

    一.什么是观察者模式 1.生活中的观察者模式 1.警察抓小偷 在现实生活中,警察抓小偷是一个典型的观察者模式「这以一个惯犯在街道逛街然后被抓为例子」,这里小偷就是被观察者,各个干警就是观察者,干警时时 ...

  9. 观察者模式(Observer)

    观察者模式是对象的行为模式,又叫发布-订阅(Publish/Subscribe)模式.模型-视图(Model/View)模式.源-监听器(Source/Listener)模式或从属者(Dependen ...

  10. 设计模式: 自己手动实现一个观察者设计模式

    观察者模式: 定义了对象之间的一对多依赖,这样一来.当一个对象(被观察者)改变状态时,它的全部依赖者(观察者)都会收到通知并自己主动更新. 在观察者模式中,会改变的是主题的状态,以及观察者的数目和类型 ...

最新文章

  1. python升级知识整理 第五节:文件整理
  2. 动词ing基本用法_动词ing形式的用法及变化规则
  3. 安卓设备刷linux发行版,绝对精华,大牛教你在Android系统上安装linux发行版
  4. Android开发学习笔记-自定义组合控件
  5. Matlab代码提示“svmtrain已删除 请改用fitcsvm”,以及svmpredict没有返回结果label和精度accuracy的解决办法
  6. 开发人员不可不知的六大JavaScript框架 传统网站网页转移动端方式
  7. 《C++ primer》--第11章
  8. photo-sphere-viewer.js使用时图片拉伸的问题
  9. assimp android build,使用Android Studio+CMakeLists编译assimp
  10. 「09」真损啊!——损失函数与极大似然估计
  11. Kubernetes 是什么?为什么也称为 K8S?| 科普
  12. CAD绘图设计效率慢?这些外挂神器帮你1小时完成3小时的工作!
  13. 微信ipad协议源码
  14. ANSYS APDL学习(5):ANSYS输入文件input file 的编写和调试方法
  15. 区块链赋能金融科技!2018 PPP全球数字资产投资峰会在京召开
  16. python实现sklearn的基本操作流程,sklearn预处理方法,sklearn基础算法的使用,以及sklearn模型的选择方法。
  17. UOJ#311. 【UNR #2】积劳成疾 动态规划
  18. 分类导航(更新时间:2019.1.18)
  19. Docker容器时间不正确 差八个时区
  20. java 输出hello

热门文章

  1. [九省联考2018] 一双木棋 chess
  2. Visual Studio 2012安装VASSISTX插件后导致CPU高的解决的方法
  3. 【JAVA错误笔记】 - Unable add facets project AnnotationWebService CXF 2-x Web Services
  4. split方法在低版本IE浏览器上无法解析的问题
  5. 科研不是比赛,而是一种对未知和完美的自我追求——跟邢波(Eric Xing)面对面聊科研...
  6. PackageManager.getPackageSizeInfo||UserHandle.myUserId()
  7. silverlight 地图轨迹回放
  8. 【转】HTML标签大全
  9. Goland的下载与安装
  10. Python在线 基础教程