Kotlin观察者模式

embedded/2025/3/6 10:10:16/

观察者模式是一种设计模式,它定义了对象之间的一对多依赖关系,当一个对象改变状态时,所有依赖于它的对象都会得到通知并自动更新。这种模式在许多编程场景中非常有用,例如事件处理、数据绑定和通知系统。

观察者模式的主要组成部分
主题(Subject):维护观察者的列表,并提供添加和删除观察者的方法。当主题的状态发生变化时,它会通知所有观察者。

观察者(Observer):定义了一个更新接口,当主题状态发生变化时,主题会调用观察者的更新方法。

观察者模式的优点
松耦合:观察者模式允许对象之间松耦合,因为它们不需要知道彼此的具体实现。
可扩展性:可以轻松地添加或删除观察者,而不需要修改主题或观察者的代码。
灵活性:观察者模式可以用于实现事件驱动编程,使得系统更加灵活和响应迅速。
观察者模式的缺点
性能问题:当观察者数量较多时,通知所有观察者可能会影响性能。
复杂性:观察者模式可能会增加系统的复杂性,特别是在处理复杂的依赖关系时。

在Kotlin中,观察者模式可以通过接口和类来实现。以下是一个简单的观察者模式的实现示例:

//观察者
interface Observer<in T>{fun update(data:T)
}//被观察者
class Subject<T> {//一个列表,用于保存观察者private val observers = mutableListOf<Observer<T>>()//将观察者添加到列表中。fun attach(observer:Observer<T>){observers.add(observer)}//从列表中移除观察者fun detach(observer:Observer<T>){observers.remove(observer)}
//通知观察者fun notify(data:T){observers.forEach {it.update(data)}}
}//观察者实现
class MyObserver:Observer<String>{override fun update(data: String) {println("Received data:$data")}
}//通过创建一个Subject和一个Observer,将观察者附加到主题上,通知观察者一些数据,分离观察者,然后再次通知以显示分离的观察者不再接收通知
fun main() {val subject = Subject<String>()val observer = MyObserver()subject.attach(observer)subject.notify("hello,World")subject.detach(observer )subject.notify("end edn")}
//打印结果:Received data:hello,World

http://www.ppmy.cn/embedded/170455.html

相关文章

Django生成Docx文件

在Django项目中生成.docx文件&#xff0c;你可以使用python-docx库&#xff0c;这是一个非常强大的库&#xff0c;用于创建和更新Microsoft Word文档。以下是如何在Django项目中生成.docx文件的步骤&#xff1a; 安装python-docx 首先&#xff0c;你需要安装python-docx库。可…

在虚拟机上安装 Hadoop 全攻略

在虚拟机上安装 Hadoop 是进入大数据处理和分析领域的重要一步。以下将详细讲解在常见虚拟机软件&#xff08;如 VMware Workstation、VirtualBox&#xff09;中&#xff0c;于 Linux 虚拟机系统安装 Hadoop 的流程与要点。 一、前期准备 虚拟机软件与系统镜像 &#xff1a;确…

jupyter notebook更改文件存储路径

默认情况打开是这样的 进入cmd或者Anaconda Prompt&#xff0c;输入以下命令 jupyter notebook --generate-config进入该目录 打开该文件&#xff0c;CTRLF 查找c.ServerApp.root_dir 进行修改。 这样就修改好啦&#xff01;

K8s部署kube-state-metrics和cAdvisor

在 Kubernetes (K8s) 上部署 kube-state-metrics 和 cAdvisor&#xff0c;并允许外部访问它们的 metrics 接口&#xff0c;同时配置 RBAC 鉴权&#xff0c;可以按照以下步骤进行。 1. 部署 kube-state-metrics kube-state-metrics 是一个服务&#xff0c;它监听 Kubernetes A…

java后端开发day27--常用API(二)正则表达式爬虫

&#xff08;以下内容全部来自上述课程&#xff09; 1.正则表达式&#xff08;regex&#xff09; 可以校验字符串是否满足一定的规则&#xff0c;并用来校验数据格式的合法性。 1.作用 校验字符串是否满足规则在一段文本中查找满足要求的内容 2.内容定义 ps&#xff1a;一…

Kylin麒麟操作系统服务部署 | NFS服务部署

以下所使用的环境为&#xff1a; 虚拟化软件&#xff1a;VMware Workstation 17 Pro 麒麟系统版本&#xff1a;Kylin-Server-V10-SP3-2403-Release-20240426-x86_64 一、 NFS服务概述 NFS&#xff08;Network File System&#xff09;&#xff0c;即网络文件系统。是一种使用于…

VSCode配置优化指南:打造高效开发环境的终极实践

一、为什么需要优化VSCode&#xff1f; 作为一款轻量级但功能强大的编辑器&#xff0c;VSCode的默认配置虽然能满足基本需求&#xff0c;但面对大型项目、多插件协作或复杂开发场景时&#xff0c;性能瓶颈和操作低效问题会逐渐暴露。优化目标包括&#xff1a; 减少内存和CPU占…

MQ保证消息的顺序性

在消息队列&#xff08;MQ&#xff09;中保证消息的顺序性是一个常见的需求&#xff0c;尤其是在需要严格按顺序处理业务逻辑的场景&#xff08;例如&#xff1a;订单创建 → 支付 → 发货&#xff09;。 一、消息顺序性被破坏的原因 生产者异步/并行发送&#xff1a;消息可能…