Skip to content

Commit c58eef8

Browse files
committed
feat: #23-Python
Reto #23-Python realizado por mrodara
1 parent bede897 commit c58eef8

File tree

1 file changed

+112
-0
lines changed

1 file changed

+112
-0
lines changed
+112
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,112 @@
1+
#### PATRONES DE DISEÑO: SINGLETON
2+
3+
'''
4+
El patrón Singleton es un patrón de diseño que asegura que una clase tenga una única instancia en todo el programa
5+
y proporciona un punto de acceso global a esa instancia. Es útil en casos como la gestión de configuraciones,
6+
recursos compartidos (como conexiones a bases de datos) o registros de logs.
7+
8+
Python ofrece varias formas de implementar este patrón, la más sencilla es usando variables de clase
9+
'''
10+
11+
# Implementación básica: usando variables de clase
12+
class Configuration:
13+
_instance = None # Variable de clase para almacenar la única instancia
14+
15+
# Método para controla la construcción de la instancia
16+
def __new__(cls, *args, **kwargs):
17+
if not cls._instance:
18+
cls._instance = super().__new__(cls, *args, **kwargs) #Nueva instancia usando clase base
19+
cls._instance.settings = {} #Creamos un diccionario para almacenar nuestra configuración
20+
21+
return cls._instance # Devolvemos la instáncia única (nueva o ya creada)
22+
23+
def set(self, key, value):
24+
self.settings[key] = value
25+
26+
def get(self, key):
27+
return self.settings.get(key, None)
28+
29+
# Uso de singleton
30+
config1 = Configuration()
31+
config2 = Configuration()
32+
33+
config1.set("db_host", "192.168.20.10")
34+
config1.set("db_name", "my_db")
35+
config1.set("db_user", "user_db")
36+
config1.set("port", 3306)
37+
38+
print(config1.get("db_host")) # 192.168.20.10
39+
print(config2.get("db_host"))
40+
41+
print(config1 is config2)
42+
43+
### EJERCICIO EXTRA
44+
class Session():
45+
__instance = None
46+
47+
def __new__(cls, *args, **kwargs):
48+
if not cls.__instance:
49+
cls.__instance = super().__new__(cls, *args, **kwargs)
50+
cls.__instance.username = None
51+
cls.__instance.session_id = None
52+
cls.__instance.name = None
53+
cls.__instance.email = None
54+
55+
return cls.__instance
56+
57+
def set_username(self, username):
58+
self.username = username
59+
60+
def set_session_id(self, session_id):
61+
self.session_id = session_id
62+
63+
def set_name(self, name):
64+
self.name = name
65+
66+
def set_email(self, email):
67+
self.email = email
68+
69+
def get_username(self):
70+
return self.username
71+
72+
def get_session_id(self):
73+
return self.session_id
74+
75+
def get_name(self):
76+
return self.name
77+
78+
def get_email(self):
79+
return self.email
80+
81+
def end_session(self):
82+
self.username = None
83+
self.session_id = None
84+
self.name = None
85+
self.email = None
86+
Session.__instance = None
87+
88+
print("Sesión finalizada, con éxito...")
89+
90+
session1 = Session()
91+
session2 = Session()
92+
93+
session1.set_name('Manu')
94+
session1.set_session_id(1)
95+
session1.set_username("mrodara")
96+
session1.set_email("[email protected]")
97+
98+
print(session2.get_name())
99+
print(session2.get_username())
100+
print(session2.get_session_id())
101+
print(session2.get_email())
102+
103+
session2.end_session()
104+
105+
print(session1.get_name())
106+
print(session1.get_username())
107+
print(session1.get_session_id())
108+
print(session1.get_email())
109+
110+
### FIN EJERCICIO EXTRA
111+
112+
#### FIN PATRONES DE DISEÑO: SINGLETON

0 commit comments

Comments
 (0)