1
+ /*
2
+ * Decoradores en Kotlin (Versión simplificada)
3
+ *
4
+ * Los decoradores son un patrón de diseño estructural que permite añadir
5
+ * nuevas funcionalidades a objetos existentes sin alterar su estructura.
6
+ * En Kotlin, podemos implementar decoradores de manera sencilla utilizando
7
+ * funciones de orden superior.
8
+ *
9
+ * En esta implementación, nos centraremos en decorar funciones específicas
10
+ * en lugar de intentar crear un decorador genérico para cualquier tipo de función.
11
+ */
12
+
13
+ // Función que queremos decorar
14
+ fun operation (x : Int , y : Int ): Int = x + y
15
+
16
+ // Decorador simple
17
+ fun decorateOperation (func : (Int , Int ) -> Int , before : () -> Unit , after : () -> Unit ): (Int , Int ) -> Int {
18
+ return { x, y ->
19
+ before()
20
+ val result = func(x, y)
21
+ after()
22
+ result
23
+ }
24
+ }
25
+
26
+ // Decorador para contar llamadas a función
27
+ fun countCallsOperation (func : (Int , Int ) -> Int ): (Int , Int ) -> Int {
28
+ var count = 0
29
+ return { x, y ->
30
+ count++
31
+ println (" La función ha sido llamada $count veces" )
32
+ func(x, y)
33
+ }
34
+ }
35
+
36
+ fun main () {
37
+ // Ejemplo de uso del decorador simple
38
+ val decoratedOperation = decorateOperation(
39
+ ::operation,
40
+ before = { println (" Antes de la operación" ) },
41
+ after = { println (" Después de la operación" ) }
42
+ )
43
+
44
+ println (" Resultado: ${decoratedOperation(5 , 3 )} " )
45
+
46
+ // Ejemplo de uso del decorador que cuenta llamadas
47
+ val countedOperation = countCallsOperation(::operation)
48
+
49
+ repeat(3 ) {
50
+ println (" Resultado: ${countedOperation(it, it + 1 )} " )
51
+ }
52
+ }
0 commit comments