ObserverManager类:
/**
* 1、观察者模式管理类
*/
class ObserverManager : SubjectListener {
/**
* 观察者集合
*/
private val list = ArrayList<ObserverListener>()
override fun add(observerListener: ObserverListener) {
// 加入队列
list.add(observerListener)
}
override fun notifyObserver(count: String) {
// 通知观察者刷新数据
for (observerListener in list) {
observerListener.observerUpData(count)
}
}
override fun remove(observerListener: ObserverListener) {
// 从监听队列删除
list.remove(observerListener)
}
companion object {
val instance: ObserverManager by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) {
ObserverManager()
}
}
}
/**
* 2、观察者接口
*/
interface ObserverListener {
/**
* 刷新操作
* @param count 传输的内容
*/
fun observerUpData(count: String)
}
/**
* 3、被观察者接口
*/
interface SubjectListener {
/**
* 添加监听
*/
fun add(observerListener: ObserverListener)
/**
* 通知的内容
*/
fun notifyObserver(count: String)
/**
* 删除
*/
fun remove(observerListener: ObserverListener)
}
MainActivity
import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import com.example.test.common.ObserverListener
import com.example.test.common.ObserverManager
class MainActivity : AppCompatActivity(), ObserverListener {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// 注册观察者
ObserverManager.instance.add(this)
val intent= Intent(this@MainActivity,MainActivity2::class.java)
startActivity(intent)
}
override fun observerUpData(count: String) {
Log.e("111","=监听到==》$count")
}
override fun onDestroy() {
super.onDestroy()
ObserverManager.instance.remove(this)
}
}
MainActivity2
class MainActivity2 : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main2)
}
// 按钮点击通知观察者,触发
fun bt_click(view: View) {
// 传输数据到第一个页面
ObserverManager.instance.notifyObserver("我是第二页面的数据,触发更新数据啦!!!")
}
}
点击按钮触发通知观察者事件:
缺点:响应时间在0.5s左右