1
00:00:00,120 --> 00:00:00,540
Bienvenido.

2
00:00:00,570 --> 00:00:05,040
Continuamos con el patrón decorador o decorador de la categoría estructurales.

3
00:00:05,100 --> 00:00:10,740
Bueno, tiene como finalidad agregar funcionalidad dinámica al objeto, pero sin utilizar la herencia.

4
00:00:10,800 --> 00:00:13,200
Claro, porque podríamos utilizar herencia.

5
00:00:13,290 --> 00:00:17,520
Heredamos de una clase y le podemos agregar una funcionalidad extra.

6
00:00:17,610 --> 00:00:22,800
Por ejemplo, sobre escribiendo métodos es una alternativa, pero utilizando el patrón de curator es

7
00:00:22,800 --> 00:00:24,390
mucho más eficiente.

8
00:00:24,510 --> 00:00:30,030
Y también vamos a utilizar mucho menos clases de herencia, porque por ejemplo, si queremos añadir

9
00:00:30,090 --> 00:00:36,690
múltiples características adicionales a este objeto, bueno, tendremos que utilizar bastante la herencia

10
00:00:36,780 --> 00:00:38,790
y si no, va a complicar un poco el diseño.

11
00:00:38,880 --> 00:00:45,300
Pongamos un ejemplo supongamos que tenemos una clase ventana y le queremos añadir una característica

12
00:00:45,390 --> 00:00:49,910
para que se muestren los bordes de esta ventana borde arriba, abajo y a el lado bueno.

13
00:00:49,920 --> 00:00:55,260
Podemos crear una su clase ventana comporte que quedebe de ventana.

14
00:00:55,350 --> 00:00:56,810
Bueno, hasta ahí no hay ningún problema.

15
00:00:56,820 --> 00:00:59,820
Sería una sola característica, una funcionalidad.

16
00:00:59,910 --> 00:01:06,780
Pero qué pasa si además necesitamos agregar a esta ventanita arriba un botón de ayuda?

17
00:01:06,900 --> 00:01:09,090
45 interrogacion un botón de ayuda?

18
00:01:09,180 --> 00:01:15,180
Bueno, ahí tenemos diferentes alternativas, como por ejemplo, podríamos crear otra clase de ventana

19
00:01:15,270 --> 00:01:18,030
que le podríamos llamar ventana con botón de ayuda.

20
00:01:18,150 --> 00:01:24,000
El problema es que esta solución no cubre la funcionalidad tener bordes, solamente un botón de ayuda.

21
00:01:24,120 --> 00:01:28,980
Es decir, no podemos tener los borde y además el botón de ayuda al mismo tiempo, a menos que en vez

22
00:01:28,980 --> 00:01:32,460
de heredar de ventana, heredemos de ventana comporte.

23
00:01:32,550 --> 00:01:36,810
Y en ese caso le podríamos llamar ventana con bordes y botón de ayuda.

24
00:01:36,960 --> 00:01:41,760
Pero el problema es que no tenemos una opción de ventana con botón de ayuda, pero si importe.

25
00:01:41,970 --> 00:01:43,830
Es decir, no nos sirve para todos los casos.

26
00:01:43,890 --> 00:01:50,010
Solamente podemos tener una ventana, una ventana con borde, o bien una ventana con borde y botón de

27
00:01:50,010 --> 00:01:55,080
ayuda, pero no una ventana solamente con botón de ayuda y sin bordes se fijan.

28
00:01:55,260 --> 00:02:01,590
Otra alternativa sería crear las distintas combinaciones posibles para tener todas estas funcionalidades

29
00:02:01,770 --> 00:02:07,680
y en este caso ya serían cuatro clase en la herencia, por ejemplo la ventana, otra clase ventana comporte

30
00:02:07,680 --> 00:02:08,700
querea de ventana.

31
00:02:08,820 --> 00:02:14,370
Luego tendríamos una tercera clase de ventana con botón de ayuda que hereda de ventana y finalmente

32
00:02:14,370 --> 00:02:20,310
tendríamos ventana con borde y botón de ayuda que hereda de ventana con botón de ayuda.

33
00:02:20,490 --> 00:02:24,630
Se fijan entonces ya son cuatro clases para las distintas combinaciones.

34
00:02:24,690 --> 00:02:27,390
Ahora, qué pasa si le agregamos una tercera funcionalidad?

35
00:02:27,480 --> 00:02:32,760
Recuerden que acá tenemos dos, tenemos con botón de ayuda y con borde, pero se agregamos una tercera.

36
00:02:32,880 --> 00:02:35,550
Ya vamos a tener ocho clases de herencia.

37
00:02:35,640 --> 00:02:40,680
Si agregamos una cuarta funcionalidad, vamos a tener 16 clases de herencia.

38
00:02:40,860 --> 00:02:42,120
Entonces el diseño se complica.

39
00:02:42,270 --> 00:02:45,030
Entonces, en este caso la herencia no nos sirve.

40
00:02:45,180 --> 00:02:48,930
Es decir, la podemos implementar igual, pero no de la mejor forma posible.

41
00:02:49,080 --> 00:02:51,210
Y ahí es cuando entra este patrón.

42
00:02:51,240 --> 00:02:52,320
Diseño de.

43
00:02:53,040 --> 00:02:54,150
Bueno, de qué se trata?

44
00:02:54,240 --> 00:03:00,270
Vamos a tener un interfaz componente por poner un nombre componente y tenemos el objeto que le queremos

45
00:03:00,270 --> 00:03:02,340
dar funcionalidad dinámica.

46
00:03:02,460 --> 00:03:05,630
Acá tenemos el diagrama de clases para este ejemplo.

47
00:03:05,700 --> 00:03:12,930
Acá tenemos un texto, acá tenemos un componente visual y el texto hereda de componente visual y tenemos

48
00:03:12,930 --> 00:03:15,780
una clase decoradora que anida al componente.

49
00:03:15,840 --> 00:03:18,690
En este caso el texto que le queremos dar una funcionalidad.

50
00:03:18,870 --> 00:03:24,660
Pero este decorador es abstracto, pero tenemos implementación concreta y cada implementación o decorar

51
00:03:24,660 --> 00:03:29,460
concreto es para dar una funcionalidad, una característica a este objeto.

52
00:03:29,550 --> 00:03:35,490
Por ejemplo, que se pueda desplazar o agregar borde a este texto o bien algún botón de ayuda.

53
00:03:35,550 --> 00:03:40,650
Se fijan y lo que hace es justamente anidar el componente, tanto el componente que queremos decorar

54
00:03:40,770 --> 00:03:45,450
o agregar esta funcionalidad como el decorador que se encarga de decorar a este objeto.

55
00:03:45,600 --> 00:03:47,610
Ambos comparten la misma interfaz.

56
00:03:47,760 --> 00:03:53,640
Por lo tanto, el decorador de forma recursiva va a envolver al objeto y no solamente al objeto en cuestión,

57
00:03:53,640 --> 00:03:57,960
sino también a los decoradores que contienen o que envuelven al objeto.

58
00:03:58,110 --> 00:04:03,930
Es decir, algún decorador que se haya aplicado anteriormente a este objeto y lo queremos volver a decorar

59
00:04:03,930 --> 00:04:10,380
con otra característica mantener la decoración previa y además añadir una nueva decoración.

60
00:04:10,530 --> 00:04:13,710
Hay una implementación acá de recursividad y eso es lo que vamos a ver.

61
00:04:13,770 --> 00:04:15,810
Y esto lo podemos ver en el diagrama de clases.

62
00:04:15,810 --> 00:04:18,690
Si nos fijamos, hay una relación de agregación.

63
00:04:18,810 --> 00:04:25,260
Es decir, el decorador abstracto tiene una relación de agregación, es decir, agrega varios componentes

64
00:04:25,380 --> 00:04:28,800
y por eso el rombo en la relación agregación.

65
00:04:28,890 --> 00:04:34,860
Y este componente no solamente puede ser el texto, sino también puede ser el texto con un decorador,

66
00:04:34,980 --> 00:04:37,860
ese con un decorado que se le haya aplicado anteriormente.

67
00:04:38,010 --> 00:04:43,620
De esa forma, poder decorar de forma recursiva un decorador contiene varios decoradores que se han

68
00:04:43,620 --> 00:04:46,200
aplicado o bien el objeto que queremos decorar.

69
00:04:46,350 --> 00:04:48,540
Bueno, de todas formas, después lo vamos a ver en el ejemplo.

70
00:04:48,660 --> 00:04:54,300
No se preocupen, no se preocupe, siéndolo tiene 100 por ciento porque con el código va a quedar mucho

71
00:04:54,300 --> 00:04:54,750
más claro.

72
00:04:54,980 --> 00:04:59,490
Bien, entonces, para resumir un poco más abajo, estamos en la página de Wikipedia.

73
00:05:00,180 --> 00:05:05,100
Acá tenemos los componentes principales, el componente define la interfaz para los objetos que pueden

74
00:05:05,100 --> 00:05:07,560
tener responsabilidades añadidas.

75
00:05:07,680 --> 00:05:08,910
Es decir, que vamos a decorar.

76
00:05:08,970 --> 00:05:11,760
Le vamos a agregar de forma dinámica una característica.

77
00:05:11,910 --> 00:05:13,480
Luego tenemos el componente concreto.

78
00:05:13,620 --> 00:05:18,090
Define un objeto, el cual se le puede agregar una responsabilidad adicional.

79
00:05:18,270 --> 00:05:24,330
Luego tenemos El decorador mantiene una referencia al componente asociado que le queremos dar una funcionalidad

80
00:05:24,420 --> 00:05:30,090
extra, pero también puede ser componente o bien un decorador que a su vez contiene el componente y

81
00:05:30,090 --> 00:05:34,560
tanto el decorador como el componente comparten la misma interfaz componente.

82
00:05:34,770 --> 00:05:38,880
Por lo tanto, se pueden ir agregando funcionalidades de forma recursiva.

83
00:05:38,970 --> 00:05:40,950
Y por último, el decorador concreto.

84
00:05:41,160 --> 00:05:46,800
Una implementación del decorador que añade una responsabilidad o funcionalidad al componente.

85
00:05:46,950 --> 00:05:48,060
Bien, veamos el ejemplo.

86
00:05:48,300 --> 00:05:50,510
Vamos a cerrar la clase que tenemos todas.

87
00:05:50,610 --> 00:05:51,510
Cerrar todo.

88
00:05:51,930 --> 00:05:53,280
Nos vamos a ir a patrones.

89
00:05:53,430 --> 00:05:55,290
Vamos a crear un nuevo package.

90
00:05:56,640 --> 00:06:03,100
De corecto, bien, lo primero vamos a crear nuestra interfaz.

91
00:06:03,120 --> 00:06:03,990
Componente.

92
00:06:05,040 --> 00:06:10,280
Qué va a ser en común, tanto al objeto que queremos decorar, como también a los decoradores, que

93
00:06:10,280 --> 00:06:12,620
a su vez contienen hoy tu objeto para decorar?

94
00:06:12,840 --> 00:06:19,040
Bien, entonces una interfaz seleccionamos interfaz, le vamos a llamar, fórmate, habla en nombre

95
00:06:19,040 --> 00:06:24,890
de lo mismo, pues el componente formateado hable un nombre descriptivo según nuestro contexto, el

96
00:06:24,890 --> 00:06:30,410
contexto, el ejemplo, hacer un texto del tipo string que le vamos a formatear, por ejemplo, convertir

97
00:06:30,410 --> 00:06:35,210
a mayúscula, dar vuelta los caracteres, subrayar el texto.

98
00:06:35,360 --> 00:06:36,470
En fin, lo que queramos.

99
00:06:36,500 --> 00:06:37,610
Entonces formateado L.

100
00:06:40,010 --> 00:06:42,550
Voy a tener el método dar formato.

101
00:06:47,690 --> 00:06:52,930
Bien, pero recuerden que la interfases, el public, el modificador, no se escribe.

102
00:06:53,740 --> 00:06:59,800
Es decir, da lo mismo, pero se puede omitir por defecto es public, entonces trec, dar formato y

103
00:06:59,800 --> 00:07:00,220
listo.

104
00:07:00,880 --> 00:07:03,140
Vamos a tener nuestro objeto que queremos decorar.

105
00:07:03,490 --> 00:07:06,960
Que le queremos dar una característica dinámica extra.

106
00:07:07,180 --> 00:07:11,320
Le vamos a llamar texto o frase o como queramos.

107
00:07:12,670 --> 00:07:16,720
La idea que implemente la interfaz, es decir, que se pueda decorar o formatear.

108
00:07:18,310 --> 00:07:20,670
Simplement formatear.

109
00:07:21,370 --> 00:07:25,270
Acá nos pide implementar el método dar formato.

110
00:07:27,550 --> 00:07:28,120
Perfecto.

111
00:07:28,300 --> 00:07:38,260
Ahora el texto va a tener un atributo private string, texto o frase un constructor.

112
00:07:42,460 --> 00:07:46,100
No vamos a pasar el texto y también el método GET.

113
00:07:50,550 --> 00:07:52,500
Qué texto, no?

114
00:07:52,530 --> 00:07:57,300
Porque estamos pasando por constructor, aunque también lo podríamos tener, pero eso sería básicamente

115
00:07:57,720 --> 00:07:58,920
y en dar formato.

116
00:07:59,610 --> 00:08:04,620
Vamos a devolver el texto y el atributo texto por defecto, sin formato.

117
00:08:04,860 --> 00:08:07,470
Entonces Wyeth texto el método GET.

118
00:08:08,070 --> 00:08:08,850
Eso por ahora.

119
00:08:09,000 --> 00:08:10,860
Luego vamos a tener el decorador.

120
00:08:11,610 --> 00:08:15,840
Entonces en decorador vamos a implementar los decoradores.

121
00:08:17,530 --> 00:08:21,340
Un package decorado solamente para que esté ordenado.

122
00:08:21,910 --> 00:08:26,470
Acá vamos a crear los decoradores para agregar estas características.

123
00:08:26,650 --> 00:08:35,740
Texto decorador, una clase, pero hacer una clase abstracta ya porque la idea de que tengamos diferentes

124
00:08:35,740 --> 00:08:38,590
decoradores abstracto.

125
00:08:40,450 --> 00:08:47,100
Y vamos a implementar la misma interfaz de texto formateado doble implementas formatear.

126
00:08:48,530 --> 00:08:54,530
Pero recuerde que el decorador debe anidar envolver al componente para que lo pueda decorar.

127
00:08:54,860 --> 00:09:00,620
Entonces vamos a tener un atributo private tiene que ser del tipo formatear.

128
00:09:00,970 --> 00:09:05,600
Por qué no solamente podremos tener un texto el objeto que queremos decorar, sino también podría tener

129
00:09:05,690 --> 00:09:06,680
otros decoradores.

130
00:09:06,800 --> 00:09:14,120
Y de esa forma poder mantener el decorador anterior y darle una funcionalidad extra de forma recursiva.

131
00:09:14,180 --> 00:09:16,160
Entonces Private, fórmate table

132
00:09:19,160 --> 00:09:22,400
texto y si lo pasamos por constructor?

133
00:09:24,170 --> 00:09:25,640
Zeca Generate.

134
00:09:27,110 --> 00:09:27,920
Constructor.

135
00:09:28,470 --> 00:09:30,350
Repasemos el texto del tipo formation.

136
00:09:31,190 --> 00:09:34,060
Recuerden que texto implementa la interfaz formateada.

137
00:09:34,250 --> 00:09:35,750
Por lo tanto, del tipo de.

138
00:09:37,180 --> 00:09:41,100
Pero también podría ser otro decorador para decorar de forma recursiva.

139
00:09:41,470 --> 00:09:42,460
Te molesto con el padre?

140
00:09:42,670 --> 00:09:44,710
Ahora vamos a tener un decorador hijo.

141
00:09:46,370 --> 00:09:50,000
Concreto puede ser, por ejemplo, mayúscula, decorador.

142
00:09:54,170 --> 00:09:54,470
Bien

143
00:09:57,140 --> 00:10:05,840
tent texto decorador y acá nos pide por la interfaz, implementar el método, dar formato.

144
00:10:07,390 --> 00:10:11,170
Recuerden que el texto decorador implementa la interfaz formateados.

145
00:10:11,620 --> 00:10:16,750
Pero como es abstracto, no está obligado a implementar el método, pero si lo tienen que implementar

146
00:10:16,780 --> 00:10:17,470
sus hijos.

147
00:10:18,100 --> 00:10:20,590
Acá nos pide también el constructor.

148
00:10:20,870 --> 00:10:23,740
Claro, porque tengo que pasar el componente a decorar.

149
00:10:23,830 --> 00:10:25,800
Entonces, un clic derecho generate.

150
00:10:27,400 --> 00:10:31,600
Constructor y listo, con Súper lo pasamos al padre.

151
00:10:32,320 --> 00:10:33,880
Ahora le damos el formato.

152
00:10:34,060 --> 00:10:35,110
Ya tenemos texto.

153
00:10:36,600 --> 00:10:40,620
Entonces texto, punto, dar formato.

154
00:10:41,920 --> 00:10:43,450
Y acá le añadimos el extra.

155
00:10:43,580 --> 00:10:52,780
Acá marca error porque el texto lo dejamos como privat privado y lo podríamos cambiar a protected para

156
00:10:52,780 --> 00:10:54,880
que sea visible también en la clase hija.

157
00:10:55,060 --> 00:10:56,440
Entonces lo hagamos como protected.

158
00:10:56,920 --> 00:11:00,280
De esa forma nos marcaron y visible en esta clase.

159
00:11:00,460 --> 00:11:00,790
Bien.

160
00:11:00,880 --> 00:11:01,690
Y lo decoramos.

161
00:11:01,990 --> 00:11:02,740
Punto.

162
00:11:03,420 --> 00:11:04,570
Tú aparques.

163
00:11:05,140 --> 00:11:06,280
Lo convertimos en mayúscula.

164
00:11:07,030 --> 00:11:14,710
Entonces mantenemos la característica inicial, original o anterior y le agregamos una nueva funcionalidad.

165
00:11:15,690 --> 00:11:16,950
Un decorador muy simple.

166
00:11:17,040 --> 00:11:18,330
Vamos a crear otro más.

167
00:11:20,380 --> 00:11:23,170
Por ejemplo, reversa decorador

168
00:11:26,550 --> 00:11:30,640
y lo mismo heredamos del padre Tent.

169
00:11:31,030 --> 00:11:32,200
Texto decorador.

170
00:11:34,510 --> 00:11:36,670
Implementamos el constructor es lo primero.

171
00:11:40,940 --> 00:11:44,150
Para pasar el componente luego.

172
00:11:45,590 --> 00:11:53,300
Generate Implementamos el método del padre o Berruguete o implementar en realidad dar formato ok, lo

173
00:11:53,300 --> 00:11:55,760
mismo, pero vamos a invertir los caracteres.

174
00:11:55,850 --> 00:12:07,340
Una forma simple es utilizando String Builder String Builder para que tenemos new string builder y le

175
00:12:07,340 --> 00:12:16,400
pasamos el texto punto dar formato, la cadena completa, el texto completo y vamos a devolver el string

176
00:12:16,400 --> 00:12:17,840
builder que se ve.

177
00:12:18,200 --> 00:12:18,680
Punto.

178
00:12:18,740 --> 00:12:25,190
Acá tiene el método Reverse Reverse para dar vuelta y lo convertimos a String.

179
00:12:26,420 --> 00:12:27,110
Así de simple.

180
00:12:28,100 --> 00:12:34,980
Entonces tomamos el texto original en un String Builder, lo damos vuelta y lo devolvemos como un string.

181
00:12:35,450 --> 00:12:42,500
El esta aitas decorado, le enviamos otro decorador y así podremos tener muchos se fijan una nueva clase

182
00:12:42,680 --> 00:12:43,730
reemplazar espacio.

183
00:12:48,460 --> 00:12:50,080
Reemplazar espacio decorador.

184
00:12:52,760 --> 00:12:57,940
Stents texto decorador implementamos el método.

185
00:12:59,880 --> 00:13:00,720
De formato.

186
00:13:01,200 --> 00:13:02,010
El constructor.

187
00:13:03,560 --> 00:13:07,610
Genere constructor y reemplazar espacio.

188
00:13:07,730 --> 00:13:08,060
Bueno.

189
00:13:08,960 --> 00:13:10,490
Texto, punto.

190
00:13:10,610 --> 00:13:11,630
Dar formato.

191
00:13:12,260 --> 00:13:13,340
Punto replies.

192
00:13:15,440 --> 00:13:16,130
Espacio.

193
00:13:17,090 --> 00:13:17,810
Por ejemplo.

194
00:13:17,810 --> 00:13:18,950
Por guion.

195
00:13:18,950 --> 00:13:19,940
Bajo de esto.

196
00:13:21,010 --> 00:13:25,720
Y por último, podríamos tener otro decorador New Yaba Class.

197
00:13:25,960 --> 00:13:28,900
Le vamos a llamar subrayado decorador.

198
00:13:34,410 --> 00:13:35,010
Extend

199
00:13:37,350 --> 00:13:41,760
texto decorador perfecto, implementamos el método.

200
00:13:44,560 --> 00:13:45,360
Constructor.

201
00:13:47,620 --> 00:13:48,440
Generad.

202
00:13:50,720 --> 00:13:56,180
El esto de cómo podemos agregar un subrayado, podríamos utilizar un string builder.

203
00:13:56,540 --> 00:14:04,460
Primero calculamos el largo del string e igual texto, punto dar formato.

204
00:14:05,000 --> 00:14:05,780
Punto Lenka.

205
00:14:06,020 --> 00:14:09,920
Ahí tenemos la cantidad de caracteres del texto, del texto actual, del texto.

206
00:14:10,010 --> 00:14:12,410
Ya se ha decorado anteriormente o no?

207
00:14:12,890 --> 00:14:14,300
Usamos un string builder.

208
00:14:16,610 --> 00:14:17,450
String builder.

209
00:14:17,690 --> 00:14:21,150
Se ve igual new String Builder?

210
00:14:21,950 --> 00:14:23,300
Le pasamos el texto.

211
00:14:23,480 --> 00:14:24,230
Punto.

212
00:14:24,440 --> 00:14:25,910
Dar formato con el formato.

213
00:14:27,080 --> 00:14:27,380
Bien.

214
00:14:27,440 --> 00:14:32,720
Partimos de esa base y abajo le agregamos un subrayado por cada caracter.

215
00:14:32,840 --> 00:14:35,480
Un guión bajo ese punto.

216
00:14:35,570 --> 00:14:40,370
Append Lo que si vamos a agregar un salto línea entonces con n.

217
00:14:42,340 --> 00:14:48,190
Usamos un for for, partimos a cero hasta el total.

218
00:14:51,500 --> 00:14:59,840
Incrementamos ese punto append, entonces, por cada carácter vamos a agregar un subrayado.

219
00:15:02,020 --> 00:15:02,720
Y listo.

220
00:15:03,140 --> 00:15:05,960
Luego devolvemos el S.V.

221
00:15:06,320 --> 00:15:07,370
Punto tu estrella.

222
00:15:07,640 --> 00:15:08,390
Ahí lo tenemos.

223
00:15:08,630 --> 00:15:10,400
Ven, vamos a probar el decorador.

224
00:15:10,580 --> 00:15:13,100
Vamos a crear una clase con el método Main.

225
00:15:13,280 --> 00:15:14,150
Acá en la raíz.

226
00:15:15,420 --> 00:15:18,510
New Ya Klauss ejemplo decorador.

227
00:15:24,860 --> 00:15:28,700
Main y comenzamos primero el texto formateado l

228
00:15:31,280 --> 00:15:36,980
texto vamos a importar formatear doble new texto.

229
00:15:37,160 --> 00:15:40,040
Recuerden por constructor le pasamos el contenido.

230
00:15:44,030 --> 00:15:45,130
Hola que tal Andrés?

231
00:15:46,340 --> 00:15:46,940
Perfecto.

232
00:15:47,210 --> 00:15:48,980
Ahí tenemos el texto que queremos decorar.

233
00:15:51,950 --> 00:15:53,090
Mayúscula Decorador

234
00:15:55,430 --> 00:16:03,080
mayúscula igual new mayúscula, decorador que le pasaba por constructor, le pasamos un instance de

235
00:16:03,080 --> 00:16:03,530
formatear.

236
00:16:04,190 --> 00:16:07,070
El texto por constructor.

237
00:16:07,250 --> 00:16:07,640
Listo.

238
00:16:07,890 --> 00:16:10,250
Ahí tenemos ahora, además de mayúscula.

239
00:16:10,400 --> 00:16:13,100
Quiero dar vuelta la palabra reversar.

240
00:16:13,380 --> 00:16:23,810
Entonce entonces reversa decorador, reversa igual new reversa decorador.

241
00:16:24,020 --> 00:16:24,920
Y le pasamos.

242
00:16:25,070 --> 00:16:31,010
Le pasamos el otro decorador que contiene el texto y de esa forma empieza a decorar recursivamente.

243
00:16:31,370 --> 00:16:36,410
Recuerden que un decorador puede contener cualquier componente objeto que implemente la interfaz.

244
00:16:36,440 --> 00:16:36,770
Fórmate.

245
00:16:37,310 --> 00:16:39,950
Y cualquier decorador le implementa a través del padre.

246
00:16:40,130 --> 00:16:43,310
Recuerden que acá tenemos texto decorador.

247
00:16:43,640 --> 00:16:50,630
El padre implementa formatea ible, pero a su vez el texto, el texto mismo que le queremos dar funcionalidad

248
00:16:50,630 --> 00:16:53,710
dinámica también implementa formatear.

249
00:16:55,330 --> 00:17:00,430
Entonces puedo decorar, ya sea un decorador que contiene el texto o directamente el texto.

250
00:17:01,780 --> 00:17:09,880
Te fijen, entonces acá pasamos mayúscula y además quiero subrayar entonces subrayado.

251
00:17:12,960 --> 00:17:22,230
Sub rayar igual new subrayado decorador le pasamos reversa para que se compongan, para que sea de forma

252
00:17:22,230 --> 00:17:28,630
dinámica, para que sea de forma recursiva, entonces reversa Shout.

253
00:17:29,430 --> 00:17:35,790
Vamos a imprimir el resultado final que lo tiene el subrayar, subrayar, punto, dar formato.

254
00:17:36,390 --> 00:17:40,530
Entonces de parte y de forma recursiva se comienza a formatear.

255
00:17:41,700 --> 00:17:42,540
Vamos a levantar.

256
00:17:46,680 --> 00:17:53,910
Se fijen, está en mayúscula, la aplicamos mayúscula, la aplicamos reversa y la aplicamos subrayada.

257
00:17:55,430 --> 00:17:57,050
Qué pasa si comentamos acá?

258
00:17:57,590 --> 00:17:58,220
Reversa?

259
00:18:00,120 --> 00:18:00,690
Perfecto.

260
00:18:00,780 --> 00:18:03,510
Y en subrayar le pasamos mayúscula.

261
00:18:10,270 --> 00:18:15,370
Hola, qué tal Andrés, se fijan, entonces tenemos la combinaciones posibles, simplemente implementamos

262
00:18:15,370 --> 00:18:20,260
el decorador y lo pasamos por constructor, ya sea otro decorador o el texto.

263
00:18:20,590 --> 00:18:25,420
Ahora, si solamente quiero subrayar Quito mayúscula y acá pasamos texto.

264
00:18:29,870 --> 00:18:30,470
Hola, qué tal, André?

265
00:18:30,530 --> 00:18:31,790
Pero común y corriente.

266
00:18:32,210 --> 00:18:32,990
Y subrayado.

267
00:18:34,030 --> 00:18:44,980
Pero además, por ejemplo, reemplazar espacio decorador, reemplazar igual new reemplazaste cordado.

268
00:18:45,010 --> 00:18:46,180
Vamos a pasar, subrayas.

269
00:18:49,720 --> 00:18:53,020
Acá sería reemplazar.

270
00:18:54,460 --> 00:18:55,030
Reemplazar.

271
00:18:55,120 --> 00:18:55,750
Dar formato.

272
00:18:56,440 --> 00:19:02,440
Ya que subrayar pasamos el texto y luego en reemplazar vamos a pasar a subrayar.

273
00:19:03,820 --> 00:19:04,720
Veamos el resultado.

274
00:19:06,990 --> 00:19:10,080
Te elijan, cambia los espacios por guión bajo.

275
00:19:12,210 --> 00:19:13,200
Ahora, si queremos todo.

276
00:19:15,530 --> 00:19:22,310
Mayúscula K mayúscula reversa, acá reversa y subrayar, acá subrayar.

277
00:19:27,220 --> 00:19:27,790
Perfecto.

278
00:19:27,910 --> 00:19:28,570
Esa es la idea.

279
00:19:28,890 --> 00:19:30,490
Se fijan si leemos al revés.

280
00:19:30,610 --> 00:19:31,180
Hola!

281
00:19:32,170 --> 00:19:36,460
Qué tal Andrés en mayúscula reversa.

282
00:19:36,670 --> 00:19:39,910
Convertimos los espacios con guión y subrayados.

283
00:19:40,000 --> 00:19:43,000
4. Característica y al final son poca clase.

284
00:19:43,180 --> 00:19:50,440
Si hubiésemos utilizado la herencia serían alrededor de 16 clases y acá solamente tenemos cuatro decoradores

285
00:19:50,710 --> 00:19:53,230
subrayado, reversa, reemplazar y mayúscula.

286
00:19:53,360 --> 00:19:55,180
Más El padre, nada más.

287
00:19:55,240 --> 00:19:57,400
Continuamos en la siguiente clase.
