Skip to content

Commit 734dc05

Browse files
authored
Merge pull request mouredev#4233 from hectorio23/hectorio23
#23 - Python
2 parents 6bc5ad5 + 6b88004 commit 734dc05

File tree

3 files changed

+264
-0
lines changed

3 files changed

+264
-0
lines changed
Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
// Autor: Héctor Adán
2+
// GitHub: https://github.com/hectorio23
3+
4+
#include <iostream>
5+
#include <string>
6+
#include <optional>
7+
8+
/////////////////////////////////////////////////
9+
/////////////////// EJERCICIO 1 /////////////////
10+
/////////////////////////////////////////////////
11+
12+
class NotDuplicity {
13+
public:
14+
static NotDuplicity& getInstance() {
15+
static NotDuplicity instance;
16+
return instance;
17+
}
18+
19+
// Eliminamos los métodos de copia y asignación para evitar múltiples instancias
20+
NotDuplicity(NotDuplicity const&) = delete;
21+
void operator=(NotDuplicity const&) = delete;
22+
23+
private:
24+
NotDuplicity() {} // Constructor privado
25+
};
26+
27+
/////////////////////////////////////////////////
28+
///////////////// EJERCICIO EXTRA ///////////////
29+
/////////////////////////////////////////////////
30+
31+
class UserSession {
32+
public:
33+
struct UserData {
34+
int id;
35+
std::string username;
36+
std::string name;
37+
std::string email;
38+
};
39+
40+
static UserSession& getInstance() {
41+
static UserSession instance;
42+
return instance;
43+
}
44+
45+
// Eliminamos los métodos de copia y asignación para evitar múltiples instancias
46+
UserSession(UserSession const&) = delete;
47+
void operator=(UserSession const&) = delete;
48+
49+
void setUser(int userId, const std::string& username, const std::string& name, const std::string& email) {
50+
userData = UserData{userId, username, name, email};
51+
}
52+
53+
std::optional<UserData> getUser() const {
54+
return userData;
55+
}
56+
57+
void clearUser() {
58+
userData.reset();
59+
}
60+
61+
private:
62+
std::optional<UserData> userData;
63+
64+
UserSession() {} // Constructor privado
65+
};
66+
67+
int main() {
68+
// Ejercicio 1: Singleton Genérico
69+
NotDuplicity& obj1 = NotDuplicity::getInstance();
70+
NotDuplicity& obj2 = NotDuplicity::getInstance();
71+
72+
std::cout << "ID Objeto 1 => " << &obj1 << std::endl;
73+
std::cout << "ID Objeto 2 => " << &obj2 << std::endl;
74+
std::cout << "¿Los objetos 1 y 2 son iguales? " << (&obj1 == &obj2) << std::endl;
75+
76+
std::cout << "\n********************************\n";
77+
78+
// Ejercicio Extra: Sesión de Usuario
79+
UserSession& session = UserSession::getInstance();
80+
session.setUser(1, "hectorio23", "Adán", "adan_example@example.com");
81+
82+
auto user = session.getUser();
83+
if (user) {
84+
std::cout << "Usuario: " << user->username << ", Nombre: " << user->name << ", Email: " << user->email << std::endl;
85+
}
86+
87+
session.clearUser();
88+
89+
user = session.getUser();
90+
if (!user) {
91+
std::cout << "Datos del usuario borrados" << std::endl;
92+
}
93+
94+
// Verificación de singleton:
95+
UserSession& anotherSession = UserSession::getInstance();
96+
std::cout << "¿Las sesiones son iguales? " << (&session == &anotherSession) << std::endl;
97+
98+
return 0;
99+
}
Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
// Autor: Héctor Adán
2+
// GitHub: https://github.com/hectorio23
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+
- DIFICULTAD EXTRA (opcional):
10+
Utiliza el patrón de diseño "singleton" para representar una clase que
11+
haga referencia a la sesión de usuario de una aplicación ficticia.
12+
La sesión debe permitir asignar un usuario (id, username, nombre y email),
13+
recuperar los datos del usuario y borrar los datos de la sesión.
14+
*/
15+
16+
/////////////////////////////////////////////////
17+
/////////////////// EJERCICIO 1 /////////////////
18+
/////////////////////////////////////////////////
19+
20+
class NotDuplicity {
21+
constructor() {
22+
if (NotDuplicity.instance) {
23+
return NotDuplicity.instance;
24+
}
25+
NotDuplicity.instance = this;
26+
return this;
27+
}
28+
}
29+
30+
const obj1 = new NotDuplicity();
31+
const obj2 = new NotDuplicity();
32+
33+
console.log(`ID Objeto 1 => ${obj1}`);
34+
console.log(`ID Objeto 2 => ${obj2}`);
35+
console.log(`¿Los objetos 1 y 2 son iguales? ${obj1 === obj2}`);
36+
37+
console.log("\n********************************\n");
38+
39+
/////////////////////////////////////////////////
40+
///////////////// EJERCICIO EXTRA ///////////////
41+
/////////////////////////////////////////////////
42+
43+
class UserSession {
44+
constructor() {
45+
if (UserSession.instance) {
46+
return UserSession.instance;
47+
}
48+
UserSession.instance = this;
49+
this._user_data = null;
50+
return this;
51+
}
52+
53+
setUser(userId, username, name, email) {
54+
this._user_data = {
55+
id: userId,
56+
username: username,
57+
name: name,
58+
email: email
59+
};
60+
}
61+
62+
getUser() {
63+
return this._user_data;
64+
}
65+
66+
clearUser() {
67+
this._user_data = null;
68+
}
69+
}
70+
71+
// Ejemplo de uso:
72+
const session = new UserSession();
73+
session.setUser(1, 'hectorio23', 'Adán', 'adan_example@example.com');
74+
75+
// Muestra los datos del usuario
76+
console.log(session.getUser());
77+
78+
session.clearUser();
79+
80+
// Muestra null, ya que los datos han sido borrados
81+
console.log(session.getUser());
82+
83+
// Verificación de singleton:
84+
const anotherSession = new UserSession();
85+
86+
// True, ambas variables apuntan a la misma instancia
87+
console.log(session === anotherSession);
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
# Autor: Héctor Adán
2+
# GitHub: https://github.com/hectorio23
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+
- DIFICULTAD EXTRA (opcional):
10+
Utiliza el patrón de diseño "singleton" para representar una clase que
11+
haga referencia a la sesión de usuario de una aplicación ficticia.
12+
La sesión debe permitir asignar un usuario (id, username, nombre y email),
13+
recuperar los datos del usuario y borrar los datos de la sesión.
14+
'''
15+
16+
##################################################
17+
################# EJERCICIO 1 ####################
18+
##################################################
19+
20+
class Not_Duplicity:
21+
_instance = { }
22+
23+
def __new__(cls):
24+
if cls._instance is None:
25+
cls._instance = super().__new__(cls)
26+
27+
return cls._instance
28+
29+
obj1 = Not_Duplicity()
30+
obj2 = Not_Duplicity()
31+
32+
print(f"ID Objeto 1 => { id(obj1) }")
33+
print(f"ID Objeto 2 => { id(obj2) }")
34+
print(f"¿Los objetos 1 y dos son iguales? { id(obj1) == id(obj2) }")
35+
36+
print("\n********************************\n")
37+
38+
39+
##################################################
40+
############### EJERCICIO EXTRA ##################
41+
##################################################
42+
43+
class UserSession:
44+
_instance = None
45+
_user_data = None
46+
47+
def __new__(cls):
48+
if cls._instance is None:
49+
cls._instance = super(UserSession, cls).__new__(cls)
50+
return cls._instance
51+
52+
def set_user(self, user_id, username, name, email):
53+
self._user_data = {
54+
'id': user_id,
55+
'username': username,
56+
'name': name,
57+
'email': email
58+
}
59+
60+
def get_user(self):
61+
return self._user_data
62+
63+
def clear_user(self):
64+
self._user_data = None
65+
66+
# Ejemplo de uso:
67+
session = UserSession()
68+
session.set_user(1, 'hectorio23', 'Adán', 'adan_example@example.com')
69+
70+
print(session.get_user()) # Muestra los datos del usuario
71+
72+
session.clear_user()
73+
74+
print(session.get_user()) # Muestra None, ya que los datos han sido borrados
75+
76+
# Verificación de singleton:
77+
another_session = UserSession()
78+
print(session is another_session) # True, ambas variables apuntan a la misma instancia

0 commit comments

Comments
 (0)