Els objectes singleton són una característica poderosa de Scala que permet definir una única instància d'una classe. A diferència de les classes, que poden tenir múltiples instàncies, un objecte singleton només té una instància que és creada la primera vegada que s'accedeix a l'objecte. Aquesta característica és útil per a definir constants, mètodes utilitaris o per implementar patrons de disseny com el Singleton.

Conceptes Clau

  • Definició d'Objecte Singleton: Un objecte singleton es defineix utilitzant la paraula clau object en lloc de class.
  • Única Instància: Només hi ha una instància d'un objecte singleton, i aquesta instància és creada la primera vegada que s'accedeix a l'objecte.
  • Mètodes i Variables: Els objectes singleton poden contenir mètodes i variables, igual que les classes.

Definició d'un Objecte Singleton

A continuació es mostra com definir un objecte singleton en Scala:

object SingletonObject {
  val constantValue: Int = 42

  def printMessage(): Unit = {
    println("Hola, sóc un objecte singleton!")
  }
}

Explicació del Codi

  • object SingletonObject: Defineix un objecte singleton anomenat SingletonObject.
  • val constantValue: Int = 42: Defineix una variable constant dins de l'objecte.
  • def printMessage(): Unit: Defineix un mètode que imprimeix un missatge.

Ús d'un Objecte Singleton

Per accedir als membres d'un objecte singleton, simplement utilitzem el nom de l'objecte seguit del membre al qual volem accedir:

object Main extends App {
  // Accedint a la variable constant
  println(SingletonObject.constantValue)

  // Cridant al mètode
  SingletonObject.printMessage()
}

Explicació del Codi

  • println(SingletonObject.constantValue): Accedeix a la variable constantValue de l'objecte SingletonObject i imprimeix el seu valor.
  • SingletonObject.printMessage(): Crida al mètode printMessage de l'objecte SingletonObject.

Comparació amb Classes

A continuació es mostra una taula que compara les característiques de les classes i els objectes singleton:

Característica Classe Objecte Singleton
Instàncies Múltiples Única
Definició class object
Inicialització Amb new Automàtica
Patrons de Disseny Diversos Singleton

Exercici Pràctic

Exercici

Crea un objecte singleton anomenat MathUtils que contingui els següents mètodes:

  • square(x: Int): Int: Retorna el quadrat del nombre x.
  • cube(x: Int): Int: Retorna el cub del nombre x.

Solució

object MathUtils {
  def square(x: Int): Int = {
    x * x
  }

  def cube(x: Int): Int = {
    x * x * x
  }
}

object Main extends App {
  println(MathUtils.square(3))  // Ha de retornar 9
  println(MathUtils.cube(2))    // Ha de retornar 8
}

Explicació del Codi

  • object MathUtils: Defineix un objecte singleton anomenat MathUtils.
  • def square(x: Int): Int: Defineix un mètode que retorna el quadrat del nombre x.
  • def cube(x: Int): Int: Defineix un mètode que retorna el cub del nombre x.

Resum

En aquesta secció, hem après què són els objectes singleton en Scala, com es defineixen i com s'utilitzen. Els objectes singleton són útils per a definir una única instància d'una classe, i són especialment útils per a constants i mètodes utilitaris. Hem vist exemples pràctics i hem comparat les característiques dels objectes singleton amb les classes. Finalment, hem realitzat un exercici pràctic per reforçar els conceptes apresos.

© Copyright 2024. Tots els drets reservats