Il miglior tutorial decoratore Nel 2024, in questo tutorial puoi imparare introduzione,realizzazione,

decoratore

Decorator (Decorator Pattern) consente di aggiungere nuove funzionalità ad un oggetto esistente senza modificarne la struttura. Questo tipo di modelli di progettazione appartengono modello strutturale, è disponibile come una classe wrapper.

Questo modello crea un decorativa, usato per avvolgere i metodi di classe e di classe originali nel mantenimento dell'integrità della firma sotto la premessa di fornire funzionalità aggiuntive.

Usiamo i seguenti esempi per dimostrare il modello di decoratore. Tra questi, si formerà una decorazione in diversi colori, senza cambiare la forma della classe.

introduzione

Intento: in modo dinamico a un oggetto di aggiungere alcuni ulteriori responsabilità.Maggiore funzionalità, il modello decoratore rispetto sottoclasse più flessibile.

Principalmente per risolvere: in generale, spesso utilizzata per estendere un patrimonio di classe per raggiungere, a causa dell'introduzione di una statiche caratteristiche di ereditarietà di classe e funzionalità con l'aumento esteso, la sottoclasse sarebbe gonfiarsi.

Quando usare: non si vuole un aumento nel caso di molte classi di estensione sottocategoria.

Come risolvere: dividere le specifiche responsabilità funzionali, mentre ereditando il modello decoratore.

Codice chiave: 1, gli atti di classe componentecome un ruolo astratta, non dovrebbe l'implementazione specifica. 2, un riferimenti alle classi modificati e componente di ereditarietà di classe, classi di estensione specifici override del metodo classe padre.

Esempi di applicazione: 1, il re delle scimmie 72 cambiamento quando diventa "tempio", ha semplicemente era una scimmia, ma ha una funzione di tempio.2, a prescindere di una cornice non ci può essere appeso al muro, ma di solito c'è una cornice, e il telaio è stato in realtà appeso alla parete. Prima appesa al muro, pittura può essere coperto con vetro, montato alla casa telaio; poi la pittura, vetro e telaio formato di un oggetto.

Vantaggi: decorative e decorazione può essere sviluppato in modo indipendente, non sono accoppiati tra loro, modello decorativo è un modo alternativo di ereditarietà, motivi decorativi può estendere dinamicamente una classe che implementa la funzione.

Svantaggi: più complessa a più strati decorativi.

scenari di utilizzo: 1, si estende una funzione di classe.2, la funzionalità di aumento dinamico, dinamica revocata.

Nota: È possibile sostituire l'ereditarietà.

realizzazione

Creeremo una interfacciaformae l'implementazione dell'interfacciaShapeclassi di entità. Poi creiamo una realizzazione di un'interfaccia astrattaForma ShapeDecoratordecorativo e l'oggettoShapecome le sue variabili di istanza.

RedShapeDecoratorè quello di raggiungere ilShapeDecoratorclassi dientità.

DecoratorPatternDemo,i nostri corsi dimostrativi utilizzandoRedShapeDecoratorper decorare oggettoShape.

modello Decorator diagramma UML

fase 1

Creare un'interfaccia.

Shape.java

Forma interfaccia pubblica {
   void draw ();
}

fase 2

Creare classe di entità che implementa l'interfaccia.

Rectangle.java

public class Rettangolo implementa Shape {

   @Override
   draw public void () {
      System.out.println ( "Shape: Rectangle");
   }
}

Circle.java

public class Circle implementa Shape {

   @Override
   draw public void () {
      System.out.println ( "Forma: Circle");
   }
}

fase 3

Creare raggiungere astratto interfacciaformadecorativa.

ShapeDecorator.java

public class ShapeDecorator astratta implementa Shape {
   protetto Forma decoratedShape;

   ShapeDecorator pubblico (Forma decoratedShape) {
      this.decoratedShape = decoratedShape;
   }

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

fase 4

Creare un soggetto decorativo classeShapeDecoratorestesa.

RedShapeDecorator.java

public class RedShapeDecorator estende ShapeDecorator {

   RedShapeDecorator pubblico (Forma decoratedShape) {
      super (decoratedShape);		
   }

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

   setRedBorder private void (Forma decoratedShape) {
      System.out.println ( "Colore bordo: rosso");
   }
}

fase 5

RedShapeDecoratorutilizzare per decorare oggettoShape.

DecoratorPatternDemo.java

public class DecoratorPatternDemo {
   Main (string [] args) {public static void

      Forma del cerchio = new Circle ();

      Forma redCircle = new RedShapeDecorator (nuova Circle ());

      Forma redRectangle = new RedShapeDecorator (new Rectangle ());
      System.out.println ( "Circle con bordo normale");
      circle.draw ();

      System.out.println ( "\ nCircle di bordo rosso");
      redCircle.draw ();

      System.out.println ( "\ nRectangle di bordo rosso");
      redRectangle.draw ();
   }
}

passo 6

Verifica uscita.

Cerchio con bordo normale
Forma: Circle

Circolo di bordo rosso
Forma: Circle
Colore bordo: rosso

Rettangolo di bordo rosso
Forma: Rettangolo
Colore bordo: rosso
decoratore
10/30