scala实现观察者模式示例
来源:互联网 发布:考研五战 知乎 编辑:程序博客网 时间:2024/06/06 13:19
一个主题抽象类,主题实现类,观察者抽象类,观察者实现类,和一个主入口
详细如下:
package cn.tounaimport scala.collection.mutableimport scala.collection.mutable.{ArrayBuffer, ListBuffer}/** * User: lijie */abstract class Subject { /** * 注册观察者 * * @param obs */ def registObserver(obs: Observer): Unit /** * 注销观察者 * * @param obs */ def removeObserver(obs: Observer): Unit /** * 通知观察者 */ def notifyObserver(name: String, age: Int): Unit}abstract class Observer { /** * 更新方法 * * @param name * @param age */ def update(name: String, age: Int): Unit}class SubjectImpl extends Subject { //注册中心 var list = new ListBuffer[Observer] /** * 注册观察者 * * @param obs */ override def registObserver(obs: Observer): Unit = { list += obs } /** * 注销观察者 * * @param obs */ override def removeObserver(obs: Observer): Unit = { list -= obs } /** * 通知观察者 */ override def notifyObserver(name: String, age: Int): Unit = { list.foreach(x => { x.update(name, age) }) }}class ObserverImpl(val sub: Subject, var name: String = null, var age: Int = 0) extends Observer { //构造函数调用 online /** * 观察者上线 */ def online(): Unit = { sub.registObserver(this) } /** * 观察者下线 * * @return */ def offline(): Unit = { sub.removeObserver(this) } /** * 更新方法 * * @param name * @param age */ override def update(name: String, age: Int): Unit = { this.name = name this.age = age showInfo } def showInfo(): Unit = { println(s"current name: $name , age: $age") }}/** * 主函数入口 */object Obs { def main(args: Array[String]): Unit = { //创建主题 val subject = new SubjectImpl //创建观察者 val observer01 = new ObserverImpl(subject) val observer02 = new ObserverImpl(subject) subject.notifyObserver("zhangsan", 24) println("-------------------------") subject.notifyObserver("wangwu", 24) }}
执行结果:
阅读全文
0 0
- scala实现观察者模式示例
- 观察者模式之Scala实现
- 观察者模式与scala实现
- scala实现设计模式之观察者模式
- 观察者模式示例
- 观察者模式-示例
- 观察者模式示例代码
- 观察者模式示例
- 观察者设计模式示例
- JAVA中观察者模式示例
- 观察者模式的一个示例
- c++观察者模式代码示例
- scala模式匹配使用示例
- JAVA设计模式示例-3 观察者模式
- 观察者模式实现1
- 观察者模式 python实现
- Java实现观察者模式
- Java实现观察者模式
- BZOJ 2049 [Sdoi 2008] LCT 解题报告
- JVM内存结构
- vector用法
- iOS编程学习十二
- Freeswitch 各版本一键安装脚本 Freeswitch 快速安装 G729编解码库
- scala实现观察者模式示例
- python持久化模块:pickle和Cpickle
- 动态规划之最长公共子序列问题(LCS)
- ogg 有集成捕捉模式转换为普通模式
- git常用的一些小技巧
- 【剑指Offer】面试题19:二叉树的镜像
- poj1862
- Java+Selenium3框架设计准备篇9-用PageFactory实现POM
- iOS生成图片分享到微信的一种方法