(十七)单例模式案例-日志类

27 阅读1分钟

(一)apply的基本使用

[提问] 不使用new关键字创建对象?

在 Scala 中,apply 方法放在类的伴生对象(object)里,主要起到 工厂方法的作用,能够让使用者在创建该类实例时省去显式的 new 关键字,并且可以通过重载提供多种构造方式。

当写ClassName(arg1,arg2)时,编译器会自动翻译ClassName.apply(arg1,arg2),这可以让实例化代码更简单。

  • 代码如下
package level02
/*
* apply
* 作用:写在伴生对象中,就可以允许创建对象的时候,省略new
*/
object class10 {
  // 伴生类
  class Logger(){}
  // 伴生对象
  object Logger {
    def apply(): Logger = {
      println("Logger......")
      new Logger()
    }
  }

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

注意

1.定义一对伴生类和伴生对象

2.在伴生对象中还需要实现apply方法,返回伴生类的实例。