Das beste Dekorateur-Tutorial im Jahr 2024. In diesem Tutorial können Sie Einführung,Realisierung, lernen
Ausstatter (Decorator-Muster) ermöglicht es Ihnen, neue Funktionen zu einem bestehenden Objekt hinzuzufügen, ohne ihre Struktur zu verändern. Diese Art von Entwurfsmustern gehören Strukturmodell, es ist als Wrapper-Klasse zur Verfügung.
Dieses Muster schafft eine dekorative, verwendet, um die ursprüngliche Klasse und Klassenmethoden zu wickeln, die Integrität der Unterschrift unter der Prämisse der Bereitstellung zusätzlicher Funktionalität aufrechtzuerhalten.
Wir verwenden die folgenden Beispiele, die die Decorator-Muster zu demonstrieren. Unter ihnen werden wir eine Dekoration in verschiedenen Farben bilden, ohne die Form der Klasse zu verändern.
Absichten: dynamisch auf ein Objekt einige zusätzliche Aufgaben hinzuzufügen.Erhöhte Funktionalität, verglichen Das Decorator-Muster flexibler Subclassing.
Vor allem zu lösen: In der Regel wir häufig eine Klassenvererbung zu erweitern anschwellen zu erreichen, durch die Einführung eines statischen Klassenvererbung Features und erweiterte Funktionalität mit der Erhöhung würde die Unterklasse.
Wann verwendet: Sie müssen nicht eine Erhöhung bei vielen Unterkategorie Erweiterungsklassen wollen.
Wie zu lösen: die spezifischen funktionalen Verantwortlichkeiten teilen, während das Decorator - Muster vererben.
Key - Code: 1, Component- Klasse fungiert als eine abstrakte Rolle, sollte nicht die konkrete Umsetzung. 2, eine modifizierte Klassenreferenzen und Vererbung Komponentenklasse, außer Kraft setzen spezifische Erweiterungsklassen der übergeordneten Klasse-Methode.
Anwendungsbeispiele: 1, der Affenkönig 72 ändern , wenn er wird "Tempel", er war einfach ein Affe, aber er hat einen Tempel Funktion.2, unabhängig von einem Bilderrahmen kann es an die Wand gehängt werden, aber in der Regel gibt es einen Bilderrahmen, und der Rahmen wurde tatsächlich an der Wand hängen. Bevor an der Wand hängen, kann die Malerei mit Glas abgedeckt werden, an dem Rahmen Haus angebracht ist, dann Malerei, Glas und Rahmen eines Objektes gebildet.
Vorteile: dekorative und Dekoration können unabhängig voneinander entwickelt werden, gekoppelt sind , nicht miteinander, dekoratives Muster ist eine alternative Art der Vererbung, dekorative Muster kann dynamisch eine Klasse erweitern, die die Funktion implementiert.
Nachteile: komplexere mehrschichtige dekorativ.
Einsatzszenarien: 1, erstreckt , um eine Klassenfunktion.2, die dynamische Erhöhung Funktionalität, Dynamik entzogen.
Hinweis: Sie Vererbung ersetzen können.
Wir werden eineFormSchnittstelle und Implementierung der EntitätsklassenFormSchnittstelle erstellen. Dann haben wir eine Realisierung von abstrakten dekorativenShapeDecoratorForm - Schnittstelle und dasShape- Objekt als Instanzvariablen erstellen.
RedShapeDecoratorist die EntitätsklassenShapeDecoratorzuerreichen.
DecoratorPatternDemo,unsere Demonstration KlassenRedShapeDecoratormitShape- Objekt zu dekorieren.
Erstellen Sie eine Schnittstelle.
Shape.java
public interface Form { Leere draw (); }
Erstellen von Entity-Klasse, die die Schnittstelle implementiert.
Rectangle.java
public class Rectangle implementiert Form { @Override public void draw () { System.out.println ( "Form: Rechteck"); } }
Circle.java
public class Kreis implementiert Form { @Override public void draw () { System.out.println ( "Shape: Circle"); } }
Erstellen Sie erreichen dekorative abstrakteForm- Schnittstelle.
ShapeDecorator.java
public abstract class ShapeDecorator implementiert Form { geschützter Form decoratedShape; Öffentlichkeit ShapeDecorator (Form decoratedShape) { this.decoratedShape = decoratedShape; } public void draw () { decoratedShape.draw (); } }
Erstellen Sie eine erweiterte Einheit dekorativeShapeDecoratorKlasse.
RedShapeDecorator.java
public class RedShapeDecorator erstreckt ShapeDecorator { Öffentlichkeit RedShapeDecorator (Form decoratedShape) { super (decoratedShape); } @Override public void draw () { decoratedShape.draw (); setRedBorder (decoratedShape); } private void setRedBorder (Form decoratedShape) { System.out.println ( "Randfarbe: Rot"); } }
RedShapeDecoratorverwendenShape- Objekt zu dekorieren.
DecoratorPatternDemo.java
public class DecoratorPatternDemo { public static void main (String [] args) { Form-Kreis = new Kreis (); Form redCircle = new RedShapeDecorator (neu Kreis ()); Form redRectangle = new RedShapeDecorator (new Rectangle ()); System.out.println ( "Circle mit normalen Grenze"); circle.draw (); System.out.println ( "\ nCircle der roten Grenze"); redCircle.draw (); System.out.println ( "\ nRectangle der roten Grenze"); redRectangle.draw (); } }
Stellen Sie sicher, ausgegeben.
Kreis mit normalen Grenze Form: Kreis Kreis der roten Grenze Form: Kreis Randfarbe: Rot Rechteck von rotem Rand Form: Rechteck Randfarbe: Rot