坪山建设网站,网站做点线表格,给人做网站的,东莞大岭山属于哪个镇概念
创建一个中介来降低对象之间的耦合度#xff0c;关系”多对多“变为“一对多”。
角色介绍
Mediator#xff1a;抽象中介者#xff0c;接口或者抽象类。ConcreteMediator#xff1a;中介者具体实现#xff0c;实现中介者接口#xff0c;定义一个List管理Colleagu…概念
创建一个中介来降低对象之间的耦合度关系”多对多“变为“一对多”。
角色介绍
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 ArrayListString()fun enter(user: User) {println(${user.name}进入聊天室$id)}fun operation(user: User, msg: String) {val log ${user.name}说了$msgprintln(log)messages.add(log)}fun getMessage(): MutableListString {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(你好)
}优缺点
优点
简化对象间的关系提高灵活性促进低耦合
缺点
中介者过于庞大
应用场景
适用于复杂通信对象组重用对象。
聊天应用聊天室空中交通控制系统GUI框架MVC架构 Controller是中介者根据View的请求Model工作流引擎协调用户界面、事件之间的关系
总结
中介者模式核心在于引入中介者类承担中转和协调作用。MediatorLiveData就是使用了中介者模式可用来管理、合并多个数据源。它的源码可以参考[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YYivHGrz-1691306533508)(https://juejin.cn/post/7054720521031647245)] 参考
基于MediatorLiveData实现红点的统一管理 MediatorLiveData使用中介者模式及其应用场景