单例模式案例

16 阅读1分钟

apply

  • 1.作用:写在伴生对象中,既可以允许创建对象的时候,省略new
  • 2.在伴生对象中提供了apply方式,那么在这里会自动调用他
package level02
object Class10 {
  // 伴生类
  class Logger
  // 伴生对象
  object Logger {
    def apply(): Logger = {
      println("logger......")
      new Logger()
    }
  }
  def main(args: Array[String]): Unit = {
    // 方式1:使用new创建对象
    // val log1 = new Logger()
    // 方式2:通过伴生对象的apply方法创建对象(省略new)
    val log1 = Logger()
    val log2 = Logger()
    println(log1 == log2) // 输出false,因为每次都是新实例
  }
}

eg:

package level02
object Class10 {
  // 伴生类
  class Logger

  // 伴生对象
  object Logger {
    val instance = new Logger()
    def apply(): Logger = {
      println("logger......")
      instance
    }
  }

  def main(args: Array[String]): Unit = {
    // 通过伴生对象的apply方法创建对象(单例模式)
    val log1 = Logger()
    val log2 = Logger()
    println(log1 == log2) // 输出true,因为始终返回同一个实例
  }
}