Skip to content

Commit 9f67b25

Browse files
authored
Merge pull request #8031 from JheisonQuiroga/main
#23 - Python
2 parents 6b0b085 + a5d74b6 commit 9f67b25

File tree

1 file changed

+104
-0
lines changed

1 file changed

+104
-0
lines changed
Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
# Author: Jheison Duban Quiroga Quintero
2+
# Github: https://github.com/JheisonQuiroga
3+
4+
"""/*
5+
* EJERCICIO:
6+
* Explora el patrón de diseño "singleton" y muestra cómo crearlo
7+
* con un ejemplo genérico.
8+
*
9+
"""
10+
11+
12+
# Implementación básica
13+
class Singleton:
14+
_instance = None
15+
16+
def __new__(cls):
17+
if cls._instance == None:
18+
cls._instance = super(Singleton, cls).__new__(cls)
19+
20+
return cls._instance
21+
22+
sin1 = Singleton()
23+
print(sin1)
24+
sin2 = Singleton()
25+
print(sin2)
26+
print(sin1 is sin2) # True
27+
28+
29+
"""* DIFICULTAD EXTRA (opcional):
30+
* Utiliza el patrón de diseño "singleton" para representar una clase que
31+
* haga referencia a la sesión de usuario de una aplicación ficticia.
32+
* La sesión debe permitir asignar un usuario (id, username, nombre y email),
33+
* recuperar los datos del usuario y borrar los datos de la sesión.
34+
*/"""
35+
36+
class UserSession():
37+
_instance = None
38+
39+
def __new__(cls):
40+
if cls._instance is None:
41+
print("Creando nueva sesión de usuario!")
42+
cls._instance = super(UserSession, cls).__new__(cls)
43+
# Inicializar el estado de la sesión vacia
44+
cls._instance._user_data = None
45+
return cls._instance
46+
47+
def set_user(self, user_id, username, name, email):
48+
self._user_data = {
49+
"id": user_id,
50+
"username": username,
51+
"name": name,
52+
"email": email,
53+
"is_authenticated": True
54+
}
55+
56+
print(f"Usuario {username} ha iniciado sesión.")
57+
return self._user_data
58+
59+
def get_user(self):
60+
"""Método para obtener los datos del usuario"""
61+
if not self._user_data:
62+
print("No hay ningún usuario en la sesión.")
63+
return None
64+
else:
65+
return self._user_data
66+
67+
def is_authenticated(self):
68+
"""Verifica si hay un usuario autenticado en la sesión"""
69+
return self._user_data is not None and self._user_data.get("is_authenticated", False)
70+
71+
def logout(self):
72+
"""Borra todos los datos de la sesión"""
73+
if self._user_data:
74+
username = self._user_data["username"]
75+
self._user_data.clear()
76+
print(f"Usuario {username} ha cerrado la sesión")
77+
return True
78+
else:
79+
return False
80+
81+
if __name__ == "__main__":
82+
83+
# Caso de uso sesión usuario
84+
user1 = UserSession()
85+
print("Usuario Autenticado?:", user1.is_authenticated())
86+
87+
# Establecemos un usuario
88+
user1.set_user(1, "johndoe", "John Doe", "johndoe@fake.com")
89+
print("Usuario Autenticado?:", user1.is_authenticated())
90+
print(user1.get_user())
91+
92+
# Creamos otra instancia de la sesión (DEBE SER LA MISMA)
93+
user2 = UserSession()
94+
print("Sesión 1 es sesión 2?:", user1 is user2)
95+
96+
print("Usuario en sesion 1:", user1.get_user()["username"])
97+
print("Usuario en sesion 2:", user2.get_user()["username"])
98+
99+
# Cerramos sesión
100+
user2.logout()
101+
102+
# Verificamos en ambas sesiones
103+
print("sesion 1 Autenticado?:", user1.is_authenticated())
104+
print("sesion 2 Autenticado?:", user2.is_authenticated())

0 commit comments

Comments
 (0)