scala中的单例对象和伴生类

19 阅读1分钟

单例对象

package level2

object Sc67 {
  object Myschoool {
    val name:String = "xxx学校"

    def say(): Unit = {
      println(s"say:${name}")
    }
  }
  def main(args: Array[String]): Unit = {
    // 对象名,属性名
    Myschoool.name
    // 对象名,方法名 
    Myschoool.say()
  }
}

伴生类

package level2

object Sc68 {
  class Student(private val password: String) {
    private def validatePassword(input: String): Boolean = {
      input == password
    }
  }
  object Student {
    def check (stu: Student, pwd: String): Boolean = {
      // 在伴生对象的内部,可以访问类的 private 成员
      stu.validatePassword (pwd)
    }
  }
      def main(args: Array[String]): Unit = {
        val stu1 = new Student("12345")

        if (Student.check (stu1, "12345")) {
          println ("验证通过!")
        }
      }
}

单例模式

思路:使用private来修饰构造器,这样在类的外部就无法访问了。在伴生对象中提供获取这个实例的入口方法

package level2

object Sc69 {
  class Student private (var name: String, var age: Int) {

  }

  object Student {
      private val ins = new Student("小花", 18)
      def getInstance: Student = ins
    }

    def main(args: Array[String]): Unit = {
      val stu1 = Student.getInstance
      val stu2 = Student.getInstance

      println(stu1 == stu2)
    }
}