Skip to content

Commit d94d078

Browse files
committed
#24 - Java
1 parent 60835fb commit d94d078

File tree

1 file changed

+82
-0
lines changed

1 file changed

+82
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
public class Josegs95 {
2+
public static void main(String[] args) {
3+
//Ejercicio
4+
//En java es un poco engorroso los decoradores porque necesitas muchas clases
5+
//e interfaces para implementar el patrón de diseño
6+
Interface instance1 = new DefaultImplClass();
7+
System.out.println(instance1.getString());
8+
9+
Interface instance2 = new Decorator(new DefaultImplClass());
10+
System.out.println(instance2.getString());
11+
12+
//Reto
13+
retoFinal();
14+
}
15+
16+
public static void retoFinal(){
17+
//Voy a reutilizar la interfaz y las clases usadas en el ejercicio para evitar
18+
//crear demasiado código "dummy"
19+
Interface instance = new ChallengeDecorator(new DefaultImplClass());
20+
21+
System.out.println("Veces que se ha llamado a 'getString()': " + ((ChallengeDecorator)instance).getCounter());
22+
instance.getString();
23+
instance.getString();
24+
instance.getString();
25+
System.out.println("Veces que se ha llamado a 'getString()': " + ((ChallengeDecorator)instance).getCounter());
26+
}
27+
28+
public interface Interface{
29+
String getString();
30+
}
31+
32+
public static class DefaultImplClass implements Interface{
33+
@Override
34+
public String getString() {
35+
return "Cadena por defecto";
36+
}
37+
}
38+
39+
public static abstract class BaseDecorator implements Interface{
40+
private Interface interfaceInstance;
41+
42+
public BaseDecorator(Interface interfaceInstance) {
43+
this.interfaceInstance = interfaceInstance;
44+
}
45+
46+
@Override
47+
public String getString() {
48+
return interfaceInstance.getString();
49+
}
50+
}
51+
52+
public static class Decorator extends BaseDecorator{
53+
public Decorator(Interface interfaceInstance) {
54+
super(interfaceInstance);
55+
}
56+
57+
@Override
58+
public String getString() {
59+
return super.getString() + ", mas la cadena del decorador";
60+
}
61+
}
62+
63+
public static class ChallengeDecorator extends BaseDecorator{
64+
65+
private int counter;
66+
67+
public ChallengeDecorator(Interface interfaceInstance) {
68+
super(interfaceInstance);
69+
counter = 0;
70+
}
71+
72+
@Override
73+
public String getString() {
74+
counter++;
75+
return super.getString();
76+
}
77+
78+
public int getCounter() {
79+
return counter;
80+
}
81+
}
82+
}

0 commit comments

Comments
 (0)