Latest web development tutorials

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