Skip to content

Commit d519497

Browse files
authored
Merge pull request #102 from marcode24/2024-23-ts
✨ Add typescript solution challenge-23
2 parents a7aa93f + b42b9d2 commit d519497

File tree

2 files changed

+86
-1
lines changed

2 files changed

+86
-1
lines changed

2024/23-singleton/solution.ts

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
/* eslint-disable max-classes-per-file */
2+
/* eslint-disable no-console */
3+
/* eslint-disable no-constructor-return */
4+
5+
class Singleton {
6+
private static instance: Singleton;
7+
private value: number;
8+
9+
private constructor() {
10+
// Inicializa los atributos del Singleton aquí
11+
this.value = Math.ceil(Math.random() * 1000);
12+
}
13+
14+
static getInstance(): Singleton {
15+
if (!Singleton.instance) {
16+
Singleton.instance = new Singleton();
17+
}
18+
return Singleton.instance;
19+
}
20+
21+
getValue(): number {
22+
return this.value;
23+
}
24+
}
25+
26+
// Prueba del Singleton
27+
const singleton1 = Singleton.getInstance();
28+
const singleton2 = Singleton.getInstance();
29+
30+
console.log(singleton1.getValue()); // Imprime el valor del primer Singleton
31+
console.log(singleton2.getValue()); // Imprime el mismo valor, ya que singleton1 y singleton2 son la misma instancia
32+
console.log(singleton1 === singleton2); // true, ambas variables referencian a la misma instancia
33+
34+
interface User {
35+
id: number;
36+
username: string;
37+
name: string;
38+
email: string;
39+
}
40+
41+
class UserSession {
42+
private static instance: UserSession;
43+
private user: User | null = null; // Usuario no asignado inicialmente
44+
45+
private constructor() {}
46+
47+
static getInstance(): UserSession {
48+
if (!UserSession.instance) {
49+
UserSession.instance = new UserSession();
50+
}
51+
return UserSession.instance;
52+
}
53+
54+
// Asigna un usuario a la sesión
55+
setUser(id: number, username: string, name: string, email: string): void {
56+
this.user = {
57+
id,
58+
username,
59+
name,
60+
email,
61+
};
62+
}
63+
64+
// Recupera los datos del usuario
65+
getUser(): User | null {
66+
return this.user;
67+
}
68+
69+
// Borra los datos de la sesión
70+
clearUser(): void {
71+
this.user = null;
72+
}
73+
}
74+
75+
// Prueba del Singleton en la gestión de sesiones
76+
const session1 = UserSession.getInstance();
77+
session1.setUser(1, "marcode24", "Marco Cruz", "emailTest@gmail.com");
78+
79+
console.log(session1.getUser()); // Imprime el usuario asignado
80+
81+
const session2 = UserSession.getInstance();
82+
console.log(session2.getUser()); // También imprime el usuario asignado, ya que session1 y session2 son la misma instancia
83+
84+
session2.clearUser();
85+
console.log(session1.getUser()); // null, ya que el usuario ha sido borrado en la misma instancia

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ npm run test 'year'/'folder-name'/solution.test.js
7272
| 20 | [Peticiones HTTP](https://retosdeprogramacion.com/roadmap/) | 🔴 | [![JavaScript](https://img.shields.io/badge/-JavaScript-F7DF1E?style=flat&logo=javascript&logoColor=black)](./2024/20-peticiones-http/index.js) <br /> [![TypeScript](https://img.shields.io/badge/-TypeScript-3178C6?style=flat&logo=typescript&logoColor=white)](./2024/20-peticiones-http/solution.ts) |
7373
| 21 | [Callbacks](https://retosdeprogramacion.com/roadmap/) | 🟡 | [![JavaScript](https://img.shields.io/badge/-JavaScript-F7DF1E?style=flat&logo=javascript&logoColor=black)](./2024/21-callbacks/index.js) <br /> [![TypeScript](https://img.shields.io/badge/-TypeScript-3178C6?style=flat&logo=typescript&logoColor=white)](./2024/21-callbacks/solution.ts) |
7474
| 22 | [Funciones de Orden Superior](https://retosdeprogramacion.com/roadmap/) | 🔴 | [![JavaScript](https://img.shields.io/badge/-JavaScript-F7DF1E?style=flat&logo=javascript&logoColor=black)](./2024/22-funciones-de-orden-superior/index.js) <br /> [![TypeScript](https://img.shields.io/badge/-TypeScript-3178C6?style=flat&logo=typescript&logoColor=white)](./2024/22-funciones-de-orden-superior/solution.ts) |
75-
| 23 | [Patrones de Diseño: Singleton](https://retosdeprogramacion.com/roadmap/) | 🟡 | [![JavaScript](https://img.shields.io/badge/-JavaScript-F7DF1E?style=flat&logo=javascript&logoColor=black)](./2024/23-singleton/index.js) |
75+
| 23 | [Patrones de Diseño: Singleton](https://retosdeprogramacion.com/roadmap/) | 🟡 | [![JavaScript](https://img.shields.io/badge/-JavaScript-F7DF1E?style=flat&logo=javascript&logoColor=black)](./2024/23-singleton/index.js) <br /> [![TypeScript](https://img.shields.io/badge/-TypeScript-3178C6?style=flat&logo=typescript&logoColor=white)](./2024/23-singleton/solution.ts) |
7676
| 24 | [Patrones de Diseño: Decoradores](https://retosdeprogramacion.com/roadmap/) | 🟢 | [![JavaScript](https://img.shields.io/badge/-JavaScript-F7DF1E?style=flat&logo=javascript&logoColor=black)](./2024/24-decoradores/index.js) |
7777
| 25 | [Logs](https://retosdeprogramacion.com/roadmap/) | 🟢 | [![JavaScript](https://img.shields.io/badge/-JavaScript-F7DF1E?style=flat&logo=javascript&logoColor=black)](./2024/25-logs/index.js) |
7878
| 26 | [SOLID: Principio de Responsabilidad Única](https://retosdeprogramacion.com/roadmap/) | 🟡 | [![JavaScript](https://img.shields.io/badge/-JavaScript-F7DF1E?style=flat&logo=javascript&logoColor=black)](./2024/26-solid-srp/index.js) |

0 commit comments

Comments
 (0)