import org.junit.jupiter.api.Test class ChatUser(private val mediator: ChatMediator, private val name: String) { fun send(msg: String) { println("$name: Sending Message= $msg") mediator.sendMessage(msg, this) } fun receive(msg: String) { println("$name: Message received: $msg") } } class ChatMediator { private val users: MutableList = ArrayList() fun sendMessage(msg: String, user: ChatUser) { users .filter { it != user } .forEach { it.receive(msg) } } fun addUser(user: ChatUser): ChatMediator = apply { users.add(user) } } class MediatorTest { @Test fun Mediator() { val mediator = ChatMediator() val john = ChatUser(mediator, "John") mediator .addUser(ChatUser(mediator, "Alice")) .addUser(ChatUser(mediator, "Bob")) .addUser(john) john.send("Hi everyone!") } }