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.ObserverManagerclass 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左右