El patrón decorador puede agregar dinámicamente capacidades a objetos existentes. A continuación, utilizaré un ejemplo sencillo para demostrar cómo utilizar el patrón decorador en un programa.
1. Patrón decorador
Supongamos por un momento que estás buscando novia. Hay muchas chicas de diferentes países, como Estados Unidos, China, Japón, Francia, etc. Cada una de ellas tiene diferentes personalidades e intereses. Si necesitas simular tal situación en el programa, asume que cada chica es para un. Clases Java, habrá miles de clases, lo que provocará la expansión de clases y la escalabilidad de dicho diseño será relativamente pobre. Porque si necesitamos una chica nueva, necesitamos crear una nueva clase Java, lo que en realidad viola el principio OCP (abierto a extensión, cerrado a modificación) que debe seguirse en el desarrollo del programa.
Creemos otro diseño donde cada personalidad o pasatiempo se convierta en una decoración que se pueda agregar dinámicamente al cuerpo de cada niña.
2. Estructura del diagrama de clases
3. Código de muestra del patrón decorador
chica.java
Copie el código de código de la siguiente manera:
clase abstracta pública Chica {
Descripción de cadena = "sin particular";
cadena pública getDescription(){
descripción de la devolución;
}
}
chicaamericana.java
Copie el código de código de la siguiente manera:
clase pública AmericanGirl extiende Chica {
publicAmericanGirl() {
descripción = "+Americano";
}
}
chica europea.java
Copie el código de código de la siguiente manera:
clase pública EuropeanGirl extiende Girl {
chica europea pública(){
descripción = "+europeo";
}
}
ChicaDecorator.java
Copie el código de código de la siguiente manera:
clase abstracta pública GirlDecorator extiende Girl {
Cadena abstracta pública getDescription();
}
Ciencia.java
Copie el código de código de la siguiente manera:
La clase pública Science extiende GirlDecorator {
Chica privada;
Ciencia pública (niña niña) {
esta.chica = chica;
}
@Anular
cadena pública getDescription() {
return this.girl.getDescription() + "+Me gusta la ciencia";
}
public void caltulateStuff() {
System.out.println("¡cálculo científico!");
}
}
arte.java
Copie el código de código de la siguiente manera:
arte de clase pública extiende GirlDecorator {
Chica privada;
Arte público (niña niña) {
esta.chica = chica;
}
@Anular
cadena pública getDescription() {
return this.girl.getDescription() + "+Me gusta el arte";
}
sorteo público vacío () {
System.out.println("¡haz dibujos!");
}
}
principal.java
Copie el código de código de la siguiente manera:
clase pública principal {
público estático vacío principal (String [] argumentos) {
//Chica americana corriente
Chica g1 = nueva AmericanGirl();
System.out.println(g1.getDescription());
//A los que les gusta la ciencia
Ciencia g2 = nueva Ciencia(g1);
System.out.println(g2.getDescription());
//A los que les gusta el arte
Arte g3 = nuevo Arte(g2);
System.out.println(g3.getDescription());
}
}
4. Aplicación del patrón decorador en JDK.
IO en Java es el ejemplo más típico del uso del patrón decorador.
El siguiente es un ejemplo simple de cómo decorar un objeto InputStreamReader a través de un objeto BufferedReader:
Copie el código de código de la siguiente manera:
Entrada de BufferedReader = nuevo BufferedReader (nuevo InputStreamReader (System.in));
//System.in es un objeto InputStream
(Finaliza el texto completo)