No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Singleton

11/32
Recursos

Aportes 25

Preguntas 2

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

El profesor esta utilizando la misma implementación del SIngleton que se utiliza en Java… pero en Kotlin es supremamente breve hacer un singleton y es de esta forma:

object UserSingleton{
 val userName="cristian"
}

Y para usarlo.

UserSingleton.userName

¿Muy breve verdad? Solo hay que declarar una clase con la palabra object en vez de class para convertirlo en un singleton.

Creo que el profesor le falta más experiencia en Kotlin.

Le faltó hacer al constructor del UserSingleton private

class UserSingleton private constructor()

Si no se hace Private entonces no tiene ningún sentido el resto de la implementación debido a que sin el podríamos crear tantas instancias distintas como quisieramos

Companion Object es muy parecido a @staticmethod en Python

Yo usuaria Singleton, para persistir datos que necesite en todo el proceso de la aplicación, datos que no sea mutables.

No entiendo para que sería necesario crear un singleton para solo el username. No sería mejor que la variable sea publica y estática y usarla como UserSingleton.username? Entiendo que probablemente no sea una buena práctica por el tema de encapsulamiento y eso, pero sirve y evitaría crear un singleton. Por qué es necesario crear un singleton allí? Lo veo más necesario para una instancia de retrofit por ejemplo, que es donde mayormente uso el singleton.

Lo usaria por ejemplo para el usuario logeado, lo usaria por ejemplo si tengo un reproductor de video, siempre retornar la misma instancia del player y solo jugar con funciones internas para reproducir diferentes videos. Lo usaria para instanciar un objeto que me ayude a acceder a la base de datos, no veo la utilidad de tener muchas instancias, con una es suficiente. Bastante util

Yo usaría Singleton para definir instancias de SQlite, por ejemplo lo utilizo en mis proyectos para usar Room y con eso solo construyo la base de datos una sola vez.
Muy bueno el curso hasta este momento. Gracias Cristian.

Estás haciendo un cast de un valor nulleable a uno non-nullable, eso es una súper mala práctica. Aún no me creo que este curso esté en la cima de toda la ruta de aprendizaje. 😕

Singleton en Flutter:

class UserSingleton {
  static final UserSingleton _instance = UserSingleton._internal();

  String userName = 'Alvaro';
  // using a factory is important
  // because it promises to return _an_ object of this type
  // but it doesn't promise to make a new one.
  factory UserSingleton() {
    return _instance;
  }

  // This named constructor is the "real" constructor
  // It'll be called exactly once, by the static property assignment above
  // it's also private, so it can only be called in this class
  UserSingleton._internal() {
    // initialization logic
  }

  // rest of class as normal, for example:
  void updateUserName(String name) {
    userName = name;
  }
}

Pueden revisar mi articulo sobre singleton en Flutter aquí.

Creo que falto el punto de cuándo no usarlo.
Y esta claro que fue mas por temas académicos que haya creado la clase de username static, pero hay que recalcarlo en el curso, ya que usarlo de esta forma nos va a acoplar fuertemente el código, y al momento de querer testear se nos complicaría.

SIngleton lo puedo usar para las los datos de login

¿Cuándo usarlo?
Cuando queremos datos
Datos que son útiles para múltiples flujos
Para tener acceso global a los datos

Beneficios:
Una única instancia de los datos transversales
Acceso desde cualquier lugar
Se crea la instancia solamente cuando se va a usar

Singleton es la única instancia para toda la aplicación, se lo puede usar cuando necesitemos una sola instancia, y este podrá ser para múltiples flujos.
Nota: los datos deben ser lo mas importante

Cristian debería saber que hoy perdió el Santa Fé

Mayormente utilizo este patrón para utilidades promedio. Por ejemplo que necesite manejar cálculos entre fechas. Entonces creo una clase llamada DateManager, y cómo esta la uso común en diferentes fragmentos o actividades solo para un par de cosas, entonces la hago singleton para manejarlo todo desde ahí. RECOMENDACIÓN: No utilicen este patrón cuando requieran de almacenar el contexto de la aplicación, puede ocasionar problemas entre actividades y crashear tu App en escenarios muy específicos.

Me parece bueno para usar digamos en el nickname, que cuando lo cambies en un lugar, se cambie en todos (hablando de una aplicación que no traiga esa info desde el backend)

Yo utilizaria el Singleton para obtener variables de tipo global en todo el aplicativo.

Algo importante sobre los Singletons es que el constructor tiene que ser privado, de otra forma cualquier clase podría crear una nueva instancia

Este patron usualmente lo uso para tener datos o identificadores que ocupare a traves de todas las pantallas o procesos (userId, currentOrderId, userName) etc.

Gracias, ahora me queda mucho más claro en Kotlin como aplicar el patro Singleton!

companion object nos da todos los valores estaticos que tenemos en la clase

Se puede usar para almacenar los id, ejemplo si ingreso a una actividad productos al seleccionar uno producto cargo el singleton el producto, si ingreso por sus diferentes vistas siempre podre acceder directamente al id

Lo usaria para guardar los datos del usuario y usarlos en toda la app o si quiero acceder a algun dato desde otra clase

Lo usaría para un app de reproductor de musica

yo utilizo el patrón singleton para las instancias de.las bases de datos