【单例模式】kotlin写法

一.先私有化结构化方法

写法一

  1. 新建单例对象,惰性加载该方法
    在这里插入图片描述
  2. 需要调用时直接通过类名调用
    在这里插入图片描述

写法二

  1. 使用get()方法,返回一个这个类型的单例
    在这里插入图片描述
    在这里插入图片描述

当单例模式需要获取context时


class QuitTimer private constructor() {
    
    


    companion object{
    
    
        val instance by lazy {
    
    
            QuitTimer()
        }
    }

    fun init(context: Context) {
    
    
        this.context = context.applicationContext
        handler = Handler(Looper.getMainLooper()) 
    }

    private var context: Context? = null
    private var listener: OnTimerListener? = null
    private var handler = Handler(Looper.getMainLooper())//不是主线程时  更新ui加上
    private var timerRemain: Long = 0


    interface OnTimerListener {
    
    
        fun onTimer(remain: Long)
    }

    
    fun setOnTimerListener(listener: OnTimerListener?) {
    
    
        this.listener = listener
    }

    fun start(milli: Long) {
    
    
        stop()
        if (milli > 0) {
    
    
            timerRemain = milli + DateUtils.SECOND_IN_MILLIS
            handler.post(mQuitRunnable)
        } else {
    
    
            timerRemain = 0
            if (listener != null) {
    
    
                listener!!.onTimer(timerRemain)
            }
        }
    }

    fun stop() {
    
    
        handler.removeCallbacks(mQuitRunnable)
    }

    private val mQuitRunnable: Runnable = object : Runnable {
    
    
        override fun run() {
    
    
            timerRemain -= DateUtils.SECOND_IN_MILLIS
            if (timerRemain > 0) {
    
    
                if (listener != null) {
    
    
                    listener!!.onTimer(timerRemain)
                }
                handler.postDelayed(this, DateUtils.SECOND_IN_MILLIS)
            } else {
    
    
                zero()
            }
        }
    }
    
}

猜你喜欢

转载自blog.csdn.net/qq_38304672/article/details/110404830