当前位置: 首页 > news >正文

Kotlin~Mediator中介者模式

概念

创建一个中介来降低对象之间的耦合度,关系”多对多“变为“一对多”。

角色介绍

  • Mediator:抽象中介者,接口或者抽象类。
  • ConcreteMediator:中介者具体实现,实现中介者接口,定义一个List管理Colleague对象。
  • Colleague:抽象同事,定义同事类的接口或者抽象类,保存中介者对象,实现同事类通用的方法。
  • ConcreteColleague:具体同事类,实现抽象同事类。通过中介者间接完成具体同事类之间的通信。

UML

中介者

代码实现

interface UserAbs {fun enter(chatRoom: ChatRoom)fun send(msg: String)fun receive()
}data class User(val name: String) : UserAbs {private var room: ChatRoom? = nulloverride fun enter(chatRoom: ChatRoom) {room = chatRoomroom?.enter(this)}override fun send(msg: String) {room?.operation(this, msg)}override fun receive() {room?.getMessage()?.forEach {println(it)}}
}
class ChatRoom(val id: Int) {private val messages = ArrayList<String>()fun enter(user: User) {println("${user.name}进入聊天室$id")}fun operation(user: User, msg: String) {val log = "${user.name}说了$msg"println(log)messages.add(log)}fun getMessage(): MutableList<String> {return messages}
}fun main() {val room = ChatRoom(1)val user1 = User("张三")val user2 = User("李四")val user3 = User("王八")user1.enter(room)user2.enter(room)user3.enter(room)user1.send("你好")
}

优缺点

优点

  • 简化对象间的关系
  • 提高灵活性
  • 促进低耦合

缺点

  • 中介者过于庞大

应用场景

适用于复杂通信对象组,重用对象。

  1. 聊天应用,聊天室
  2. 空中交通控制系统
  3. GUI框架,MVC架构 Controller是中介者,根据View的请求Model
  4. 工作流引擎,协调用户界面、事件之间的关系

总结

中介者模式核心在于引入中介者类,承担中转和协调作用。MediatorLiveData就是使用了中介者模式,可用来管理、合并多个数据源。它的源码可以参考:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YYivHGrz-1691306533508)(https://juejin.cn/post/7054720521031647245)]
参考:

  • 基于MediatorLiveData实现红点的统一管理
  • MediatorLiveData使用
  • 中介者模式及其应用场景
http://www.lryc.cn/news/119853.html

相关文章:

  • 石子合并问题
  • 剑指Offer-搜索与回溯算法
  • 【云原生】Docker 详解(三):Docker 镜像管理基础
  • SD-MTSP:蜘蛛蜂优化算法SWO求解单仓库多旅行商问题MATLAB(可更改数据集,旅行商的数量和起点)
  • 【ARM 嵌入式 编译系列 3.1 -- GCC __attribute__((used)) 使用】
  • C++ ModBUS TCP客户端工具 qModMaster 介绍及使用
  • 笔记本电脑如何把sd卡数据恢复
  • 【2023 华数杯全国大学生数学建模竞赛】 B题 不透明制品最优配色方案设计 39页论文及python代码
  • Exams/ece241 2013 q4
  • Android OkHttp源码分析--分发器
  • 大数据面试题:说下Spark中的Transform和Action,为什么Spark要把操作分为Transform和Action?
  • 【图像去噪的扩散滤波】基于线性扩散滤波、边缘增强线性和非线性各向异性滤波的图像去噪研究(Matlab代码实现)
  • python函数、运算符等简单介绍2(无顺序)
  • k8s 自身原理 3
  • SpringBoot 3自带的 HTTP 客户端工具
  • Spring Boot多级缓存实现方案
  • 机器学习笔记:李宏毅chatgpt 大模型 大资料
  • 2023年中国智慧公安行业发展现况及发展趋势分析:数据化建设的覆盖范围不断扩大[图]
  • Apache Dubbo概述
  • React UI组件库
  • 计算机科学的伟大变革:从机械计算到人工智能
  • 微服务详解
  • Python爬虫的requests(学习于b站尚硅谷)
  • PHP最简单自定义自己的框架view使用引入smarty(8)--自定义的框架完成
  • 字符串的常用操作
  • 开启想象翅膀:轻松实现文本生成模型的创作应用,支持LLaMA、ChatGLM、UDA、GPT2、Seq2Seq、BART、T5、SongNet等模型,开箱即用
  • 文心一言 VS 讯飞星火 VS chatgpt (74)-- 算法导论7.2 2题
  • 大数据第二阶段测试
  • 06 为什么需要多线程;多线程的优缺点;程序 进程 线程之间的关系;进程和线程之间的区别
  • datax-web报错收集