java 分时图_软件设计模式(观察者模式)——模拟股票价格变动并绘制分时图和K线图…

一、观察者模式简介:

首先看百度百科上对观察者模式的简介:观察者模式(Observer)完美的将观察者和被观察的对象分离开。举个例子,用户界面可以作为一个观察者,业务数据是被观察者,用户界面观察业务数据的变化,发现数据变化后,就显示在界面上。面向对象设计的一个原则是:系统中的每个类将重点放在某一个功能上,而不是其他方面。一个对象只做一件事情,并且将他做好。观察者模式在模块之间划定了清晰的界限,提高了应用程序的可维护性和重用性。

观察者模式体现了系统内模块之间存在的1:n的依赖关系,其中 1在整个系统中被称作主题(Subject),n在系统中被称作观察者(Observer)。在整个系统中,这些观察者均需要利用主题的状态来决定自身的状态,当主题的状态发生改变时,这些观察者需要能被通知到并改变自身的状态。同时,当向系统中增加新的观察者时不能对系统中已存在的观察者和主题的代码造成影响,即需满足软件设计模式的开-闭原则,因此需要运用到抽象接口等技术。在观察者模式中存在以下几个角色:

Subject:抽象主题(抽象被观察者),抽象主题角色把所有观察者对象保存在一个集合里,每个主题都可以有任意数量的观察者,抽象主题提供一个接口,可以增加和删除观察者对象。

ConcreteSubject:具体主题(具体被观察者),该角色将有关状态存入具体观察者对象,在具体主题的内部状态发生改变时,给所有注册过的观察者发送通知。

Observer:抽象观察者,是观察者者的抽象类,它定义了一个更新接口,使得在得到主题更改通知时更新自己。

ConcrereObserver:具体观察者,实现抽象观察者定义的更新接口,以便在得到主题更改通知时更新自身的状态。

那么问题来了,为什么需要这么设计呢实在系统中,主题可能不止一个,观察者可以同时观察多个主题,两边形成了多对多的关系。众多主题均有一个不变的特性—通知:当自己的状态发生变化时通知观察自己的观察者状态发生变化;众多观察者均有一个不变的特性—更新:当收到主题的状态改变信 时对应的更新自己的状态。因此需要把这两个不变的部分从中抽取出来即分离变化,因而需要设计Subject抽象主题以及Observer抽象观察者。举个简单的例子,当学校周一进行一周汇 时老师不可能将一周工作和每个同学一一通知到位,不同的老师会有不同的信息,但他们均采用广播通 的方式进行工作汇 ,因此广播通 的方式是老师这个主题不变的特性;同时学生接受信息的时候均具有听这一特性,但每个学生的听的方式却各有不同。这就很好的说明了观察者模式在生活中有很多的应用。在数据发生变化的时候只需通过访问接口类的更新方法即可,在添加新的观察者或者主题时只需实现相应的接口即可。

以下为观察者模式的类图:

2cd721bbcee83139850161f53eb9c989.png

以上即为本次对观察者模式的学习与应用,感觉蛮有趣的哈哈

文章知识点与官方知识档案匹配,可进一步学习相关知识Java技能树首页概览91438 人正在系统学习中 相关资源:aladdin股市量化分析预测涨跌软件12.7周二版源代码—三一重工…

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年1月10日
下一篇 2021年1月10日

相关推荐