复习

44 阅读1分钟

1. 什么是伴生类和伴生对象?

在 Scala 中:

  • 伴生类:与伴生对象同名的类
  • 伴生对象:与伴生类同名的对象,使用 object 关键字定义

它们必须定义在同一个源文件中,可以互相访问彼此的私有成员。

示例

scala

class CompanionClass {
  private val classSecret = "class secret"
  def accessObjectSecret: String = CompanionObject.objectSecret
}

object CompanionObject {
  private val objectSecret = "object secret"
  def accessClassSecret(c: CompanionClass): String = c.classSecret
}

2. 它们有什么特点?

主要特点

  • 互相访问私有成员:伴生类和伴生对象可以访问彼此的私有字段和方法
  • 替代静态成员:Scala 没有 static 关键字,伴生对象用于存放类的"静态"成员
  • 工厂模式:常在伴生对象中定义 apply 方法作为工厂方法
  • 隐式转换:可以在伴生对象中定义隐式转换

应用场景

  • 工厂方法创建对象
  • 定义常量
  • 实现工具方法
  • 单例模式实现

3. 什么是单例模式?

单例模式是一种设计模式,确保一个类只有一个实例,并提供全局访问点。

在 Scala 中的实现

scala

// 使用 object 关键字直接创建单例
object Singleton {
  private var count = 0
  
  def increment(): Unit = {
    count += 1
  }
  
  def getCount: Int = count
}

// 使用
Singleton.increment()
println(Singleton.getCount) // 输出:1

特点

  • 延迟加载(懒加载)
  • 线程安全
  • 全局唯一实例

总结

  • 伴生对象 + 伴生类 = Scala 特有的组织代码方式
  • object 关键字 = 天然的单例模式实现
  • 伴生关系 = 打破"类与静态成员分离"的传统模式

这些特性让 Scala 在面向对象和函数式编程之间找到了很好的平衡点。