An example of a mediator pattern in Kotlin.
Table of contents for design patterns in Kotlin
In software engineering, the mediator pattern defines an object that encapsulates how a set of objects interact. This pattern is considered to be a behavioral pattern due to the way it can alter the program’s running behavior. Wikipedia
Example:
Gateway
class Gateway(
private val mediator: GatewayMediator,
private val name: String
) {
fun send(msg: String) {
mediator.send(msg, this)
}
fun receive(msg: String, from: Gateway) {
println("$name received message: $msg from: ${from.name}")
}
}
Mediator
class GatewayMediator {
private val gateways = mutableListOf<Gateway>()
fun send(msg: String, from: Gateway) {
gateways.filter { it != from }
.forEach { it.receive(msg, from) }
}
fun addGateway(gateway: Gateway) = gateways.add(gateway)
}
Usage:
fun main() {
val mediator = GatewayMediator()
val gatewayA = Gateway(mediator, "A").also { mediator.addGateway(it) }
val gatewayB = Gateway(mediator, "B").also { mediator.addGateway(it) }
val gatewayC = Gateway(mediator, "C").also { mediator.addGateway(it) }
gatewayA.send("New order")
gatewayB.send("New user")
gatewayC.send("New event")
}
Result
B received message: New order from: A
C received message: New order from: A
A received message: New user from: B
C received message: New user from: B
A received message: New event from: C
B received message: New event from: C