El mejor tutorial de decorador en 2024. En este tutorial podrás aprender introducción,realización,

decorador

Decorador (Decorator) le permite añadir nuevas características a un objeto existente sin cambiar su estructura. Este tipo de patrones de diseño pertenecen modelo estructural, que está disponible como una clase contenedora.

Este patrón crea una decorativo, que se utiliza para envolver los métodos de la clase y clase original en el mantenimiento de la integridad de la firma bajo la premisa de proporcionar funcionalidad adicional.

Utilizamos los siguientes ejemplos para demostrar el patrón decorador. Entre ellos, vamos a formar una decoración en diferentes colores, sin cambiar la forma de la clase.

introducción

Intención: dinámicamente a un objeto para agregar algunas responsabilidades adicionales.El aumento de la funcionalidad, el patrón decorador comparó la subclasificación más flexible.

Principalmente para resolver: En general, se utiliza a menudo para extender una herencia de clases de lograr, debido a la introducción de una serie de características de herencia de clases estáticas y ampliado la funcionalidad con el aumento, la subclase se hinche.

Cuándo utilizar: no desea que un aumento en el caso de muchas clases de extensión sub-categoría.

¿Cómo resolver: dividir las responsabilidades funcionales específicos, si bien hereda el patrón decorador.

Código Clave: 1, clase actúa como un papel de componentesabstracta, no debe la aplicación específica. 2, una clase de referencias de clases de componentes modificados y la herencia, las clases de extensiones específicas reemplazar el método de la clase padre.

Ejemplos de aplicación: 1, el Rey Mono 72 cambio cuando se convierte en "templo", él simplemente era un mono, pero tiene una función templo.2, independientemente de un marco de imagen no puede ser colgado en la pared, pero por lo general hay un marco de imagen, y el marco era en realidad colgado en la pared. Antes de colgar en la pared, la pintura puede ser cubierto con vidrio, montado en la casa de madera, y luego la pintura, vidrio y el marco forman de un objeto.

Ventajas: decoración y la decoración se pueden desarrollar de forma independiente, no están acoplados entre sí modelo, decorativo es un modo alternativo de la herencia, los patrones decorativos se puede extender dinámicamente una clase que implementa la función.

Desventajas: más complejo decorativo de múltiples capas.

Escenarios de uso: 1, que se extienden una función de clase.2, el aumento de funcionalidad dinámica, dinámica revocada.

Nota: Puede sustituir la herencia.

realización

Vamos a crear una interfazde la formay la implementación de la interfazen forma declases de entidad. Entonces se crea una realización de la interfaz abstracta decorativaShapeDecoratorLa forma y el objetode la formacomo sus variables de instancia.

RedShapeDecoratores lograr laShapeDecoratorclases deentidad.

DecoratorPatternDemo,nuestras clases de demostración utilizandoRedShapeDecoratorpara decorar objetoShape.

Decorator diagrama UML

Paso 1

Crear una interfaz.

Shape.java

Forma interfaz pública {
   void draw ();
}

Paso 2

Crear clase de entidad que implementa la interfaz.

Rectangle.java

clase pública implementa Rectángulo Forma {

   @ Override
   sorteo public void () {
      System.out.println ( "Forma: Rectángulo");
   }
}

Circle.java

Círculo clase pública implementa la forma {

   @ Override
   sorteo public void () {
      System.out.println ( "Forma: Círculo");
   }
}

paso 3

Crear lograr la interfaz deformadecorativa abstracta.

ShapeDecorator.java

ShapeDecorator pública clase abstracta implementa la forma {
   decoratedShape Forma protegidas;

   ShapeDecorator pública (forma decoratedShape) {
      this.decoratedShape = decoratedShape;
   }

   sorteo public void () {
      decoratedShape.draw ();
   }	
}

Paso 4

Crear una entidad de claseShapeDecoratordecorativa extendida.

RedShapeDecorator.java

RedShapeDecorator clase pública se extiende ShapeDecorator {

   RedShapeDecorator pública (forma decoratedShape) {
      super (decoratedShape);		
   }

   @ Override
   sorteo public void () {
      decoratedShape.draw ();	       
      setRedBorder (decoratedShape);
   }

   setRedBorder private void (forma decoratedShape) {
      System.out.println ( "Color del borde: Rojo");
   }
}

paso 5

RedShapeDecoratorutilizar para decorar objetoShape.

DecoratorPatternDemo.java

public class {DecoratorPatternDemo
   principales argumentos (String []) {public static void

      Forma de círculo = new Circle ();

      Forma redCircle = new RedShapeDecorator (nuevo círculo ());

      Forma redRectangle = new RedShapeDecorator (nueva Rectángulo ());
      System.out.println ( "círculo con borde normal");
      circle.draw ();

      System.out.println ( "\ nCircle de borde rojo");
      redCircle.draw ();

      System.out.println ( "\ nRectangle de borde rojo");
      redRectangle.draw ();
   }
}

paso 6

Verifique la salida.

Círculo con la frontera de la normalidad
Forma: Círculo

Círculo de borde rojo
Forma: Círculo
Frontera de color: Rojo

Rectángulo de borde rojo
Forma: Rectángulo
Frontera de color: Rojo
decorador
10/30