1+ ## 23 - SINGLETON
2+ '''
3+ * EJERCICIO:
4+ * Explora el patrón de diseño "singleton" y muestra cómo crearlo
5+ * con un ejemplo genérico.
6+ *
7+ * DIFICULTAD EXTRA (opcional):
8+ * Utiliza el patrón de diseño "singleton" para representar una clase que
9+ * haga referencia a la sesión de usuario de una aplicación ficticia.
10+ * La sesión debe permitir asignar un usuario (id, username, nombre y email),
11+ * recuperar los datos del usuario y borrar los datos de la sesión.
12+ */
13+ '''
14+ ## refactoring -- guru
15+
16+ ## SINGLETON: unica instancia de una clase
17+ '''
18+ Ejercicio
19+ '''
20+
21+
22+ class Singleton :
23+
24+ _instance = None
25+
26+ def __new__ (cls ):
27+ # Estructura común para implementar Singleton
28+ if not cls ._instance :
29+ cls ._instance = super (Singleton , cls ).__new__ (cls )
30+
31+ return cls ._instance
32+
33+ singleton_1 = Singleton ()
34+ singleton_2 = Singleton ()
35+
36+ print (singleton_1 is singleton_2 ) # Es la misma clase
37+
38+ '''
39+ Extra
40+ '''
41+
42+ class UserSession :
43+
44+ _instance = None
45+ id : str = None
46+ username : str = None
47+ name : str = None
48+ email : str = None
49+
50+ def __new__ (cls ):
51+ if not cls ._instance :
52+ cls ._instance = super (UserSession , cls ).__new__ (cls )
53+
54+ return cls ._instance
55+
56+ def set_user (self , id , username , name , email ):
57+ self .id = id
58+ self .username = username
59+ self .name = name
60+ self .email = email
61+
62+ def get_user (self ):
63+ return f"{ self .id } , { self .username } , { self .name } , { self .email } "
64+
65+ def clear_user (self ):
66+ self .id = None
67+ self .username = None
68+ self .name = None
69+ self .email = None
70+
71+ sesssion1 = UserSession ()
72+ print (sesssion1 )
73+ sesssion1 .set_user (1 , "rigo93" , "Rigo" , "rigo93acosta@gmail.com" )
74+ print (sesssion1 .get_user ())
75+
76+ sesssion2 = UserSession ()
77+ print (sesssion2 .get_user ())
78+
79+ sesssion3 = UserSession ()
80+ sesssion3 .clear_user ()
81+ print (sesssion3 .get_user ())
0 commit comments