课后例题

72 阅读1分钟

a09c6438-88bd-4062-ba82-de11a07c569e.jpg

// 1定义单例对象Circle,提供周长和面积计算方法
object Circle {
  // 圆周率
  private val PI: Double = Math.PI

  // 计算圆的周长:2 * π * 半径
  def calculateCircumference(radius: Double): Double = 2 * PI * radius

  // 计算圆的面积:π * 半径²
  def calculateArea(radius: Double): Double = PI * radius * radius
}

object Task1Demo extends App {
  val radius = 5.0
  println(s"半径为$radius的圆,周长=${Circle.calculateCircumference(radius)}")
  println(s"半径为$radius的圆,面积=${Circle.calculateArea(radius)}")
}
class Circle private() {  // 私有构造方法,防止外部直接实例化
  // 圆周率
  private val PI: Double = Math.PI

  // 计算圆的周长
  def calculateCircumference(radius: Double): Double = 2 * PI * radius

  // 计算圆的面积
  def calculateArea(radius: Double): Double = PI * radius * radius
}

// 伴生对象,负责单例实例的创建和管理
object Circle {
  // 单例实例(懒加载,首次使用时才初始化)
  private val instance: Circle = new Circle()

  // 提供获取单例实例的方法
  def getInstance: Circle = instance
}

// 使用示例
object Task2Demo extends App {
  val radius = 5.0
  val circle = Circle.getInstance  // 获取单例实例
  println(s"半径为$radius的圆,周长=${circle.calculateCircumference(radius)}")
  println(s"半径为$radius的圆,面积=${circle.calculateArea(radius)}")

  // 验证单例特性(两个引用指向同一个实例)
  val circle2 = Circle.getInstance
  println(s"是否为同一个实例:${circle eq circle2}")  // 输出 true
}