单例模式案例-日志类

65 阅读1分钟

(一)apply的基本使用

class Person{

  var name = "person"

}

object Person {

  def apply(name: String): Person = {

    var p = new Person()

    p.name = name

p

  }

}

object Test {

  def main(args: Array[String]): Unit = {

    var u1 = Person("小明") // 没有使用new

    print(u1.name)

  }

}

(1)apply 写在伴生对象中,它返回类的实例

(2)实例化对象时,就可以不用写new

(二)apply实现单例模式

在代码中 isEmpty判断是否为空,Some()用来包装一个对象,如果这个对象为空,就得到None对象,否则就返回这个对象。

package lalala

object Class11 {
  class Logger(){}
  object Logger {
    val instance=new Logger()
    def apply(): Logger= {
      println("logger.....")
      instance
    }
  }

  def main(args: Array[String]): Unit= {
    val log1 = Logger()
    val log2 = Logger()
    println(log1 == log2)
  }
}