El patrón Singleton se centra en la creación de un objeto único, es decir, en vez de instanciar el mismo objeto muchas veces solo se instanciará una vez, y si ya ha sido instanciado se proporcionará un acceso al mismo.
Es útil para ya que muchas veces no nos interesará que haya dos objetos diferentes. Por ejemplo en ciertas ocasiones en nuestra aplicación tendremos diferentes usuarios, por lo que nos interesará que se puedan crear varias instancias de User
para guardarlas en una base de datos. Pero y si nuestra apps solo necesita un usuario ya que su fin es simplemente guardar los datos en memoria del usuario que ha iniciado la sesión, el cual será siempre único, podríamos usar Singleton
para evitar tener dos usuarios diferentes los cuales podrían provocarnos un error, ya que recordemos, son los datos de inicio de sesión y solo debería haber un usuario.
Este es el diagrama de flujo de este patrón:
Para crear un Singleton en Kotlin solo necesitas esto: object MySingleton
fun main() { User.printName() User.name = "Peter" User.printName() } object User{ var name = "John" init { println("Singleton invoked") } fun printName() = println(name) }
Como puedes verás al ejecutar el código, "Singleton invoked"
solo aparecerá una vez aunque hayamos utilizado 3 veces User
.
De esta forma tan sencilla tienes tu Singleton en Kotlin además de ser completamente seguro si dos hilos accediesen a la vez al mismo objeto.
En Java sería mucho más laborioso obtener el mismo resultado además de tener que añadir un método específico para evitar problemas al acceder desde dos hilos.
public class Main { public static void main(String[] args) { User user = User.getInstance(); user.printName(); user.name = "Peter"; user.printName(); } } public class User { private static User instance = null; public String name = "John"; private User(){ System.out.println("Singleton invoked"); } private synchronized static void createInstance() { if (instance == null) { instance = new User(); } } public static User getInstance() { if (instance == null) createInstance(); return instance; } public void printName() { System.out.println(name); } }
Enlaces de interés:
En esta lección aprenderás a declarar variables y los tipos básicos.
La mejor forma de aprender algo en esta vida es a base de practicar. Espero…
La principal forma de iniciar una corrutina en Kotlin es con el coroutine builder launch…
Las coroutines en Kotlin vienen a tratar de solucionar todos los problemas y dificultades que…
Con este esquema te puedes guiar a la hora de elegir el modismo o función…
El último que queda por ver es with qué en inglés significa "con". Por lo…