用 C# 实现了示例并优化了一下:

Subject.cs

public class Subject

{

private readonly List _observers = new List();

private int _state;

public int State

{

get => _state;

set

{

_state = value;

NotifyAllObservers();

}

}

public void AddObserver(Observer observer)

{

observer.Subject = this;

_observers.Add(observer);

}

public void NotifyAllObservers() => _observers.ForEach(o => o.Update());

}

Observer.cs

public abstract class Observer

{

public Subject Subject;

public abstract void Update();

}

BinaryObserver.cs

public class BinaryObserver:Observer

{

public BinaryObserver()

{

}

public BinaryObserver(Subject subject)

{

subject.AddObserver(this);

}

public override void Update()

{

Console.WriteLine($"Binary String: {Convert.ToString(Subject.State, 2)}");

}

}

OctalObserver.cs

public class OctalObserver:Observer

{

public OctalObserver()

{

}

public OctalObserver(Subject subject)

{

subject.AddObserver(this);

}

public override void Update()

{

Console.WriteLine($"Octal String: {Convert.ToString(Subject.State, 8)}");

}

}

HexaObserver.cs

public class HexaObserver:Observer

{

public HexaObserver()

{

}

public HexaObserver(Subject subject)

{

subject.AddObserver(this);

}

public override void Update()

{

Console.WriteLine($"Hex String: {Convert.ToString(Subject.State, 16)}");

}

}

Demo.cs

public void NumberChange()

{

Subject subject1 = new Subject();

new BinaryObserver(subject1);

new OctalObserver(subject1);

new HexaObserver(subject1);

Console.WriteLine("1 state=15");

subject1.State = 15;

Console.WriteLine("1 state=10");

subject1.State = 10;

Subject subject2 = new Subject();

subject2.AddObserver(new BinaryObserver());

subject2.AddObserver(new OctalObserver());

subject2.AddObserver(new HexaObserver(subject1));

Console.WriteLine("2 state=15");

subject1.State = 15;

Console.WriteLine("2 state=10");

subject1.State = 10;

}

DHclly

DHclly

335***817@qq.com2年前 (2018-08-06)

angualr8观察者模式_观察者模式相关推荐

  1. python实现观察者模式_观察者模式--python

    参见:http://baike.baidu.com/view/1854779.htm http://blog.csdn.net/huangkangying/article/details/790160 ...

  2. angualr8观察者模式_理解观察者模式——用Angular的httpClient来解释观察者

    前言 本文关键词:观察者模式. 观察者模式是什么? 观察者模式和回调函数有什么关系? 使用httpClient时,加上.subscribe有什么作用? Angular的httpClient中如何体现观 ...

  3. java设计模式 观察者模式_理解java设计模式之观察者模式

    在生活实际中,我们经常会遇到关注一个事物数据变化的情况,例如生活中的温度记录仪,当温度变化时,我们观察它温度变化的曲线,温度记录日志等.对于这一类问题,很接近java设计模式里面的"观察者模 ...

  4. 设计模式 -行为型模式_ 观察者模式Observer Pattern 之 JDK内置的实现

    文章目录 概念 Code [主题] [观察者s] 观察者一 观察者二 [测试] 源码分析 java.util.Observable 目标类 java.util.Observer 观察者接口 notif ...

  5. java委托事件与观察者模式_多播委托与观察者模式联合使用,以及委托与事件的区别...

    首先我们先看一下多播委托: 使用委托时,首先我们声明委托,委托语法一共有四种类型,分别时有参,无参,以及有无参数返回值. 1 public class DelegateShow //: System. ...

  6. java 观察者模式_图解Java设计模式之观察者模式

    图解Java设计模式之观察者模式 天气预报项目需求 天气预报设计方案 1 - 普通方案 观察者模式(Observer)原理 观察者模式解决天气预报需求 观察者模式在JDK应用的源码分析 天气预报项目需 ...

  7. java 观察者模式_重学 Java 设计模式:实战观察者模式「模拟类似小客车指标摇号过程,监听消息通知用户中签场景」...

    一.前言 知道的越多不知道的就越多 编程开发这条路上的知识是无穷无尽的,就像以前你敢说精通Java,到后来学到越来越多只想写了解Java,过了几年现在可能想说懂一点点Java.当视野和格局的扩大,会让 ...

  8. java 观察者模式_设计模式:全面通晓23种设计模式(典藏查阅)-第三部分

    C.关系模式(11种) 先来张图,看看这11中模式的关系: 第一类:通过父类与子类的关系进行实现. 第二类:两个类之间. 第三类:类的状态. 第四类:通过中间类 父类与子类关系 13.策略模式(str ...

  9. java中线程观察者模式_设计模式之--观察者模式

    在日常生活中,有很多需要我们关注的事务(比如,股市,楼市等),这些事务我们可以称之为主题或者叫信息发布者,观察主题的目的是想了解主题的变化(消息).一种方法当然是采用盯人策略,但这种方法有个固有的缺点 ...

最新文章

  1. Python自动化开发学习2
  2. “ static”关键字在课程中做什么?
  3. C++实现插入排序算法
  4. 永洪报表工具_该怎么选BI工具
  5. 【ngx-ueditor】百度编辑器按下Shift键不触发contentChange事件
  6. 本地文件上传、下载服务器文件事物码
  7. BCE loss和 CE理解
  8. 17道因为太难而被禁用的Google面试题
  9. java for i i 区别,i ++amp;和i ++之间的区别是什么? ++我在for循环(Java)?
  10. ANT自动化压缩合并JS/CSS和更改版本号
  11. 防止浏览器记住用户名及密码的简单实用方法
  12. YDOOK:STM32: 最新版选型手册下载 2021
  13. java gd库_PHP GD库是什么
  14. C++扫描指定主机开放的端口
  15. MySQLdb 安装小结
  16. 量化交易6-backtrader编写策略的时数据获取
  17. java小游戏 飞翔的小鸟,校园新手入门,分分钟带你玩转编程
  18. Android中处理大图片时图片压缩
  19. 保护健康早休息-人体器官作息时间表
  20. VARIATIONAL AUTOENCODER FOR SPEECH ENHANCEMENT WITH A NOISE-AWARE ENCODER

热门文章

  1. 腾讯一面总结-web前端-2018.4.11
  2. 设置PYTHONIOENCODING
  3. mycat分布式mysql中间件(自增主键)
  4. Struts2环境搭建
  5. 第6章 类型和成员基础
  6. JSR-330 依赖注入
  7. Provisioning Services最佳实践一 ----架构
  8. 使用XMLHttpRequest实现AJAX
  9. Linux之python3编译安装
  10. linux学习-使用DHCP动态管理主机地址