package com.xpj.studypattern.listener
import com.xpj.designpartten.PRTMsg
import java.util.*
/**
* author : xpj
* date : 9/1/21 11:10 AM
* description :
*/
class ListenerTest {
private val sender = ListenerSender()
fun test() {
sender.addListener(object : IListener {
override fun notifyNewValue(value: Int) {
PRTMsg("receive value is : $value")
}
})
sender.testNotify()
}
}
private class ListenerSender {
private val listeners = LinkedList<IListener>()
fun addListener(listener: IListener) {
synchronized(this) {
listeners.add(listener)
}
}
fun removeListener(listener: IListener) {
synchronized(this) {
listeners.remove(listener)
}
}
fun testNotify() {
synchronized(this) {
listeners.forEach {
it.notifyNewValue(233)
}
}
}
}