Skip to content

Commit 23eacab

Browse files
authored
Merge pull request mouredev#6884 from Hequebo/hequebo23
#23 - C#
2 parents 5e02888 + c690855 commit 23eacab

File tree

1 file changed

+102
-0
lines changed

1 file changed

+102
-0
lines changed

Roadmap/23 - SINGLETON/c#/hequebo.cs

+102
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
class Program
2+
{
3+
static void Main(string[] args)
4+
{
5+
/*
6+
* No creamos un objeto de la clase, en
7+
* su lugar accedemos a la instancia ya
8+
* existente
9+
*/
10+
var singleton = Singleton.Instance;
11+
var singleton2 = Singleton.Instance;
12+
/*
13+
* Ambas variable acceden a la misma instancia
14+
* por lo que si las comparamos podemos ver
15+
* que son iguales
16+
*/
17+
Console.WriteLine($"singleton == singleton2 es {singleton == singleton2}");
18+
19+
// Ejercicio Extra
20+
var userSession = UserSession.GetInstance();
21+
userSession.SetUser(1, "Hequebo", "Emilio Quezada", "[email protected]");
22+
Console.WriteLine(userSession.GetUser());
23+
24+
var userSession2 = UserSession.GetInstance();
25+
Console.WriteLine(userSession2.GetUser());
26+
userSession2.ClearUser();
27+
28+
var userSession3 = UserSession.GetInstance();
29+
userSession3.ClearUser();
30+
Console.WriteLine(userSession3.GetUser());
31+
}
32+
}
33+
/*
34+
* Singleton es un patrón de diseño para la
35+
* creación de objetos que consiste en que
36+
* solo exista un solo objeto en todo la
37+
* aplicación y no se puedan crear más
38+
* instancias.
39+
*/
40+
class Singleton
41+
{
42+
/*
43+
* Creamos un atributo privado solo de
44+
* lectura que será del mismo tipo de la
45+
* clase en el cual estara el objeto que
46+
* se creara una vez se compile la
47+
* solución
48+
*/
49+
private static readonly Singleton _instance = new Singleton();
50+
/*
51+
* Para poder accedera a la instancia
52+
* creamos una propiedad que regresa el
53+
* atributo privado
54+
*/
55+
public static Singleton Instance { get { return _instance; } }
56+
/*
57+
* Para evitar crear objetos de esta clase
58+
* agregamos un contructor privado
59+
*/
60+
private Singleton() { }
61+
}
62+
63+
class UserSession
64+
{
65+
private static UserSession _instance = null;
66+
private int _id;
67+
private string _username;
68+
private string _name;
69+
private string _email;
70+
71+
/*
72+
* Una alternativa a tenere la instancia como
73+
* solo de lectura es crearla como nula y a
74+
* través de un metodo crear el objeto si es
75+
* que no ha sido creado antes
76+
*/
77+
public static UserSession GetInstance()
78+
{
79+
if (_instance == null)
80+
_instance = new UserSession();
81+
return _instance;
82+
}
83+
84+
public string GetUser()
85+
{
86+
return $"Id: {_id}, Usuario: {_username}, Nombre: {_name}, Correo: {_email}";
87+
}
88+
public void SetUser(int id, string username, string name, string emmail)
89+
{
90+
_id = id;
91+
_username = username;
92+
_name = name;
93+
_email = emmail;
94+
}
95+
public void ClearUser()
96+
{
97+
_id = 0;
98+
_username = "";
99+
_name = "";
100+
_email = "";
101+
}
102+
}

0 commit comments

Comments
 (0)