Kotlin 如何协调单例模式与接口回调?-科特林

Kotlin 如何协调单例模式与接口回调?-科特林,kotlin,interface,singleton,Kotlin,Interface,Singleton,以下是我的情况: 我有一台与扫描仪有蓝牙连接的打印机 扫描仪的UI必须根据打印机的操作进行更新 事实上,我有蓝牙连接,这让我想采用单例模式,但事实上,我需要回调视图,这让我想实现一个接口 但是,我不想在构造函数或getInstance()方法中添加任何参数,因为那样会破坏单例原则 我提出的(非常糟糕的)想法是在singleton类中创建一个setListener()函数,实现侦听器的视图在启动时配置为singleton。这感觉…糟透了。有谁知道一个更好的方法来沟通这两者吗 印刷经理 主要活动

以下是我的情况:

  • 我有一台与扫描仪有蓝牙连接的打印机
  • 扫描仪的UI必须根据打印机的操作进行更新
事实上,我有蓝牙连接,这让我想采用单例模式,但事实上,我需要回调视图,这让我想实现一个接口

但是,我不想在构造函数或getInstance()方法中添加任何参数,因为那样会破坏单例原则

我提出的(非常糟糕的)想法是在singleton类中创建一个setListener()函数,实现侦听器的视图在启动时配置为singleton。这感觉…糟透了。有谁知道一个更好的方法来沟通这两者吗

印刷经理 主要活动
class PrinterManager private constructor() {

    private lateinit var mListener: PrinterListener

    companion object {
        fun getInstance() = // ...
    }

    interface PrinterListener {
        fun showErrorDialog()
    }

    fun setListener(listener: PrinterListener) {
        mListener = listener
    }

    fun foo() {
        if (doSomething()) {
            // ...
        else {
            mListener.showErrorDialog()
        }
    }

}
class MainActivity: AppCompatActivity(), PrinterManager.PrinterListener {

    override onCreate(savedInstanceState: Bundle?) {
        // ...
        PrinterManager.getInstance().setListener(this)
    }

    override fun showErrorDialog() {
        // ...
    }

}