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