Skip to content

Commit 9037266

Browse files
authored
Merge pull request mouredev#6092 from simonguzman/main
#23 - Java #24 - Java #25 - Java
2 parents 5a7a7a2 + c21f343 commit 9037266

File tree

3 files changed

+493
-0
lines changed

3 files changed

+493
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
2+
public class simonguzman {
3+
public static void main(String[] args) {
4+
genericSingleton();
5+
additionalExercise();
6+
}
7+
/**************************** Ejercicio adicional ****************************/
8+
public static void additionalExercise(){
9+
UserSession session = UserSession.getUserInstance();
10+
session.assignUser("001", "Simon Guzman", "sguzman", "[email protected]");
11+
System.out.println(session.getUserData());
12+
session.deleteSession();
13+
System.out.println(session.getClass());
14+
}
15+
16+
public static class UserSession{
17+
private static UserSession instance;
18+
19+
private String id;
20+
private String name;
21+
private String userName;
22+
private String email;
23+
24+
private UserSession(){
25+
26+
}
27+
28+
public static UserSession getUserInstance(){
29+
if(instance == null){
30+
instance = new UserSession();
31+
}
32+
return instance;
33+
}
34+
35+
public void assignUser(String id, String name, String userName, String email){
36+
this.id = id;
37+
this.name = name;
38+
this.userName = userName;
39+
this.email = email;
40+
}
41+
42+
public String getUserData(){
43+
if (id == null){
44+
return "No hay usuarios en la sesion";
45+
}
46+
return "ID: "+id+" ,username: " + userName + " ,name: " + name + " ,email: " + email;
47+
}
48+
49+
public void deleteSession(){
50+
id = null;
51+
name = null;
52+
userName = null;
53+
email = null;
54+
}
55+
}
56+
57+
/**************************** Ejemplo de singleton ****************************/
58+
public static void genericSingleton(){
59+
Singleton singleton = Singleton.getInstance();
60+
singleton.showMessage();
61+
}
62+
63+
public static class Singleton{
64+
private static Singleton instance;
65+
66+
private Singleton(){
67+
68+
}
69+
70+
public static Singleton getInstance(){
71+
if(instance == null){
72+
instance = new Singleton();
73+
}
74+
return instance;
75+
}
76+
77+
public static void showMessage(){
78+
System.out.println("Soy un Singleton.");
79+
}
80+
}
81+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,193 @@
1+
2+
import java.util.HashMap;
3+
import java.util.Map;
4+
5+
6+
7+
public class simonguzman {
8+
public static void main(String[] args) {
9+
genericExample();
10+
example();
11+
adittionalExercise();
12+
}
13+
14+
/***************************** Ejercicio adicional*****************************/
15+
16+
static void adittionalExercise(){
17+
ComponentExtra componente = new ConcreteComponentExtra();
18+
CountDecorator contadorDecorador = new CountDecorator(componente);
19+
20+
contadorDecorador.operation();
21+
contadorDecorador.operation();
22+
contadorDecorador.operation();
23+
24+
System.out.println("Total de invocaciones: " + contadorDecorador.getContador());
25+
}
26+
static interface ComponentExtra{
27+
void operation();
28+
}
29+
30+
//Componente concreto
31+
static class ConcreteComponentExtra implements ComponentExtra{
32+
@Override
33+
public void operation() {
34+
System.out.println("Ejecutando operacion base...");
35+
}
36+
}
37+
38+
//Decorador abstracto
39+
static abstract class DecoratorExtra implements ComponentExtra{
40+
protected ComponentExtra component;
41+
42+
public DecoratorExtra(ComponentExtra component){
43+
this.component = component;
44+
}
45+
46+
public void operation() {
47+
this.component.operation();
48+
}
49+
}
50+
// Decorador concreto que cuenta las veces que se llama a la operación
51+
static class CountDecorator extends DecoratorExtra {
52+
private int contador = 0;
53+
54+
public CountDecorator(ComponentExtra component) {
55+
super(component);
56+
}
57+
58+
@Override
59+
public void operation() {
60+
contador++;
61+
System.out.println("La operación se ha llamado " + contador + " veces.");
62+
super.operation();
63+
}
64+
65+
public int getContador() {
66+
return contador;
67+
}
68+
}
69+
70+
/***************************** Ejemplo de implemetacion mas complejo *****************************/
71+
/*Se realizo un ejemplo adicional para mostrar mejor y poner en practica la sintaxis
72+
* del patron decorador, en el cual se busco simular lo que seria un login de una cuenta
73+
* de un usuario, con sus respectivas validaciones
74+
*/
75+
static void example(){
76+
77+
//Simulacion de inicio de sesion.
78+
UserService userService = new LoginAttemptsDecorator(new BasicUserService(), 3);
79+
userService.login("user1", "password");
80+
userService.login("user1", "wrongpassword");
81+
userService.login("user1", "wrongpassword");
82+
userService.login("user1", "wrongpassword");
83+
userService.login("user1", "wrongpassword");
84+
}
85+
//Interfaz base del servicio de usuario
86+
static interface UserService{
87+
boolean login(String username, String password);
88+
}
89+
90+
//implementacion basica del servicio de usuario
91+
static class BasicUserService implements UserService{
92+
private Map<String, String> userDatabase = new HashMap<>();
93+
94+
public BasicUserService(){
95+
//Simulacion de una base de datos de usuarios
96+
userDatabase.put("user1", "password");
97+
userDatabase.put("user2", "12345");
98+
}
99+
100+
@Override
101+
public boolean login(String username, String password){
102+
String storedPassword = userDatabase.get(username);
103+
if(storedPassword != null && storedPassword.equals(password)){
104+
System.out.println("Inicio de sesion exitoso para "+username);
105+
return true;
106+
}else{
107+
System.out.println("Credenciales incorrectas para "+username);
108+
return false;
109+
}
110+
}
111+
}
112+
113+
//Decorador para contar los intentos de inicio de sesion
114+
static class LoginAttemptsDecorator implements UserService{
115+
private UserService userService;
116+
private Map<String, Integer> loginAttempts;
117+
private int maxAttempts;
118+
119+
public LoginAttemptsDecorator(UserService userService, int maxAttempts) {
120+
this.userService = userService;
121+
this.maxAttempts = maxAttempts;
122+
this.loginAttempts = new HashMap<>();
123+
}
124+
125+
@Override
126+
public boolean login(String username, String password) {
127+
if(loginAttempts.getOrDefault(username, 0) >= maxAttempts){
128+
System.out.println("Cuenta bloqueada para "+username+" por exceder los intentos permitidos");
129+
return false;
130+
}
131+
132+
boolean success = userService.login(username, password);
133+
if(!success){
134+
loginAttempts.put(username, loginAttempts.getOrDefault(username, 0)+1);
135+
System.out.println("Intentos fallidos para "+username+":" + loginAttempts.get(username));
136+
}else{
137+
loginAttempts.put(username, 0);
138+
}
139+
return success;
140+
}
141+
142+
}
143+
144+
/***************************** Ejemplo generico *****************************/
145+
static void genericExample(){
146+
Component component = new ConcreteComponent();
147+
Component decorated = new ConcreteDecorator(component);
148+
decorated.operation();
149+
}
150+
151+
//Interfaz base
152+
static interface Component{
153+
void operation();
154+
}
155+
156+
//Componente concreto
157+
static class ConcreteComponent implements Component{
158+
@Override
159+
public void operation() {
160+
System.out.println("Ejecutando operacion base...");
161+
}
162+
}
163+
164+
//Decorador abstracto
165+
static abstract class Decorator implements Component{
166+
protected Component component;
167+
168+
public Decorator(Component component){
169+
this.component = component;
170+
}
171+
172+
public void operation() {
173+
this.component.operation();
174+
}
175+
}
176+
177+
//Decorador concreto que añade funcionalidad
178+
static class ConcreteDecorator extends Decorator{
179+
public ConcreteDecorator(Component component){
180+
super(component);
181+
}
182+
183+
@Override
184+
public void operation() {
185+
super.operation();
186+
addFunctionality();
187+
}
188+
189+
private void addFunctionality(){
190+
System.out.println("Funcionalidad adicional del decorador.");
191+
}
192+
}
193+
}

0 commit comments

Comments
 (0)