Skip to content

Instantly share code, notes, and snippets.

@miguelfermin
Created April 3, 2020 01:24
Show Gist options
  • Save miguelfermin/3a3d48a38126bd7fbf98225ee374b5e2 to your computer and use it in GitHub Desktop.
Save miguelfermin/3a3d48a38126bd7fbf98225ee374b5e2 to your computer and use it in GitHub Desktop.
Model with multi-listeners.
interface OnModelChangeListener {
fun onModelChangeName(model: Model, name: String)
}
class Model {
var name = ""
set(value) {
field = value
publishChangedName(value)
}
private var listeners = mutableMapOf<String, OnModelChangeListener>()
fun addListener(listener: OnModelChangeListener) {
val key = listener.hashCode().toString()
listeners[key] = listener
}
fun removeListener(listener: OnModelChangeListener) {
val key = listener.hashCode().toString()
listeners.remove(key)
}
fun publishChangedName(name: String) {
listeners.forEach { (_, value) ->
value.onModelChangeName(this, name)
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment