concepto
El patrón del decorador une dinámicamente la responsabilidad al objeto. Para extender la funcionalidad, el decorador proporciona una alternativa más flexible que la herencia.
El decorador y el objeto decorado tienen el mismo supertipo.
Puede envolver un objeto con uno o más decoradores.
Dado que el decorador y el objeto decorado tienen el mismo supertipo, en cualquier ocasión donde se requiera el objeto original (escrito), el objeto decorado puede ser reemplazado por él.
El decorador puede agregar su propio comportamiento antes y/o después de las acciones del decorador que se encarga de lograr un propósito específico.
Los objetos se pueden decorar en cualquier momento, por lo que los objetos se pueden decorar dinámica e ilimitadamente con su decorador favorito durante el tiempo de ejecución.
En Java, muchas clases bajo el paquete IO son la encarnación de los patrones de decoradores típicos, como:
La clase decorativa implementa la misma interfaz que la clase decorada.
A la clase decorada no le importa qué clase de implementación se utiliza para decorarla.
La clase decorativa llama el mismo método comercial para mejorar las funciones de la clase decorativa.
Ejemplo:
Diagrama de clases
interfaz pública Ireader {void read (); } El lector de clase pública implementa Ireader {@Override public void Read () {System.out.println ("Leer del lector"); }} La clase pública BufferedReader implementa Ireader {Private Ireader Mreader; Public BufferedReader (Reader Ireader) {this.mreader = lector; } @Override public void Read () {System.out.println ("Leer de BufferedReader"); mreader.read (); }} prueba de clase pública {public static void main (string [] args) {lector lector = new Reader (); lector.read (); System.out.println ("-----------"); BufferedReader BufferedReader = new BufferedReader (lector); BufferedReader.Read (); }} Características:
1. Los objetos decorativos y los objetos reales tienen la misma interfaz. De esta manera, el objeto del cliente puede interactuar con el objeto decorativo de la misma manera que el objeto real.
2. El objeto decorativo contiene una referencia a un objeto real
3. El objeto decorativo acepta todas las solicitudes del cliente. Reenvía estas solicitudes al objeto real.
4. Decorar los objetos pueden agregar algunas características adicionales antes o después de reenviar estas solicitudes. Esto asegura que en tiempo de ejecución, se puedan agregar funciones adicionales externamente sin modificar la estructura de un objeto dado.
En el diseño orientado a objetos, las extensiones funcionales a una clase dada generalmente se logran a través de la herencia. Después de la decoración, se sostiene el objeto real para mejorar su función.
Diferencia entre el modo decorador y el adaptador:
Sobre las nuevas responsabilidades: los adaptadores también pueden agregar nuevas responsabilidades al convertir, pero el objetivo principal no lo es. El modelo decorador agrega principalmente nuevas responsabilidades al decorador.
Sobre el objeto que envuelve: el adaptador conoce los detalles del adaptador (es decir, la clase de adaptador). El decorador solo sabe cuál es su interfaz.
En cuanto a su tipo específico (ya sea una clase base u otra clase derivada) solo se conoce durante el tiempo de ejecución.