Il miglior tutorial decoratore Nel 2024, in questo tutorial puoi imparare introduzione,realizzazione,
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.
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à.
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.
Creare un'interfaccia.
Shape.java
Forma interfaccia pubblica { void draw (); }
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"); } }
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 (); } }
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"); } }
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 (); } }
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