Skip to content

Commit 186ef33

Browse files
committed
23-Python-SINGLETON
1 parent 99217cc commit 186ef33

File tree

1 file changed

+80
-0
lines changed

1 file changed

+80
-0
lines changed
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
# ╔═════════════════════════════════════╗
2+
# ║ Autor: Kenys Alvarado ║
3+
# ║ GitHub: https://github.com/Kenysdev ║
4+
# ║ 2024 - Python ║
5+
# ╚═════════════════════════════════════╝
6+
7+
# -----------------------------------
8+
# * PATRONES DE DISEÑO: SINGLETON
9+
# -----------------------------------
10+
11+
"""
12+
* EJERCICIO #1:
13+
* Explora el patrón de diseño "singleton" y muestra cómo crearlo
14+
* con un ejemplo genérico.
15+
"""
16+
17+
class Singleton:
18+
__instance = None
19+
20+
def __new__(cls):
21+
if cls.__instance is None:
22+
cls.__instance = super().__new__(cls)
23+
return cls.__instance
24+
25+
singleton1 = Singleton()
26+
# singleton2 accede a la misma instancia que singleton1.
27+
singleton2 = Singleton()
28+
print(singleton1 is singleton2)
29+
30+
"""
31+
* EJERCICIO #2:
32+
* Utiliza el patrón de diseño "singleton" para representar una clase que
33+
* haga referencia a la sesión de usuario de una aplicación ficticia.
34+
* La sesión debe permitir asignar un usuario (id, username, nombre y email),
35+
* recuperar los datos del usuario y borrar los datos de la sesión.
36+
"""
37+
38+
class UserSession:
39+
__instance = None
40+
__user_id: int = None
41+
__user_name: str = None
42+
__name: str = None
43+
__email: str = None
44+
45+
def __new__(cls):
46+
if cls.__instance is None:
47+
cls.__instance = super().__new__(cls)
48+
return cls.__instance
49+
50+
def set_user(self, user_id, user_name, name, email):
51+
self.__user_id = user_id
52+
self.__user_name = user_name
53+
self.__name = name
54+
self.__email = email
55+
56+
def get_user(self) -> dict:
57+
return {
58+
"id": self.__user_id,
59+
"username": self.__user_name,
60+
"name": self.__name,
61+
"email": self.__email
62+
}
63+
64+
def logout(self):
65+
self.__instance = None
66+
self.__user_id = None
67+
self.__user_name = None
68+
self.__name = None
69+
self.__email = None
70+
71+
login_user1 = UserSession()
72+
login_user1.set_user(1, "Zoe_1", "Zoe", "[email protected]")
73+
print(login_user1.get_user())
74+
login_user1.logout()
75+
76+
login_user2 = UserSession()
77+
login_user2.set_user(1, "Ben_1", "Ben", "[email protected]")
78+
print(login_user2.get_user())
79+
login_user2.logout()
80+

0 commit comments

Comments
 (0)