应用-单例模式

96 阅读1分钟

一.apply

  1. 作用:写在伴生对象中,就可以允许创建对象的时候,省略new
  2. 在伴生对象中提供了apply方法,那么这里就会自动调用它
// 伴生类:必须与伴生对象在同一个文件、同一个包下,且名称完全一致
class Logger() {}

// 伴生对象:与伴生类同名,在同一个包下(无需嵌套在 class11 对象中)
object Logger {
  def apply(): Logger = {
    println("logger")
    new Logger() // 每次调用 apply 都会创建新的 Logger 实例
  }
}

// 程序入口:独立的 object(Scala 中 main 方法必须放在 object 中)
object Class11 {
  def main(args: Array[String]): Unit = {
    val log1 = Logger() // 等价于 Logger.apply(),调用伴生对象的 apply 方法
    val log2 = Logger()
    println(log1 == log2) // 比较两个实例的引用是否相同
  }
}

二.apply实现单例模式

object Logger {
  val instance = new Logger()
  def apply(): Logger = {
    println("logger")
    instance
    new Logger() // 每次调用 apply 都会创建新的 Logger 实例
  }

image.png