19.伴身类和伴生对象

21 阅读1分钟

今天学apply and 单例模式

apply的作用

写在伴生对象中,就可以允许创建对象的时候,省略new
object class11 {
//  伴身类
  class Logger (){}

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

  def main(args: Array[String]): Unit = {
//    创建一个类的对象
//    val log1 = new Logger()
//    在伴生对象中提供了apply方法,那么这里就会自动去调用它
    val log1 = Logger()
    val log2 = Logger()
    println(log1 == log2) // 这里会输出什么 true , 因为它得到都是同一个对象。
  }
}

单例模式!

import java.io.FileWriter

//apply
//    作用:写在伴生对象中,就可以允许创建对象的时候,省略new
object class12 {
//  伴身类
  class Logger () {
  def log(content: String) :Unit = {
    val writer = new FileWriter("test1.log",true)
    writer.write(content)
    writer.close()
//    println(s"$content")
  }
}

//  伴生对象
  object Logger {

    val instance = new Logger()
    def apply():Logger = {
      println("Logger......")
      instance
    }
  }

  def main(args: Array[String]): Unit = {
//    创建一个类的对象
//    val log1 = new Logger()
//    在伴生对象中提供了apply方法,那么这里就会自动去调用它
    val log1 = Logger()
    log1.log("2025-11-06  9:37:16 上课 \n")
    log1.log("2025-11-06  9:40:16 下课 \n")
  }
}