伴生类和伴生对象

27 阅读1分钟

apply

package level02

object scala05 {
  /***
   * 伴生类和伴生对象
   *
   * 在伴生对象中补充一个apply方法,这样创建对象的时候,就可以省略new
   *伴生类名(参数) ==== 伴生对象名.apply(参数)
   */
  // 日志
 class Logger(var filename:String) {
    
  }
   object  Logger {
     def apply (filename:String):Logger = {
       println("apply...")
       new Logger(filename)
     }
   }
  def main(args: Array[String]): Unit = {
    //省略new
    val log1 = Logger("test.log")
    println(log1.filename)
  }
}
class Logger(var filename:String) {
    def log(massage: String): Unit = {
      println(s"log: $massage")
    }
  }
  object Logger {
    private var instance: Option[Logger] = None
    def apply (filename:String):Logger = {
      if (instance.isEmpty){
        instance = Some(new Logger(filename))
      }
      instance.get
    }
  }

  def main(args: Array[String]): Unit = {
    val log1 = Logger("test.log")
    log1.log("2025.11.03 上午上课")
  }
}

将日志信息写入文件中:

 class Logger(var filename:String) {
    def log(massage: String): Unit = {
      val writer = new FileWriter(filename, true)
      writer.write(s"$massage \n")
      writer.close()
    }
  }
  object Logger {
    private var instance: Option[Logger] = None
    def apply (filename:String):Logger = {
      if (instance.isEmpty){
        instance = Some(new Logger(filename))
      }
      instance.get
    }
  }

  def main(args: Array[String]): Unit = {
    val log1 = Logger("test.log")

    log1.log("2025.11.03 上午上课")
    log1.log("2025.11.05 运动会")
    log1.log("2025.11.03 周末")


  }
}