Was ist der Dekorationsmodus?
Fügen Sie einem Objekt dynamisch einige zusätzliche Verantwortlichkeiten hinzu. Im Hinblick auf das Hinzufügen von Funktionen ist der Dekoratormodus flexibler als die Erzeugung von Unterklassen.
1. Struktur
Komponente: Definiert eine Objektoberfläche, die diesen Objekten dynamisch Verantwortlichkeiten hinzufügen kann.
Schnittstellenkomponente {public void operation ();} ConcreteComponent: Implementieren Sie die durch Komponenten definierte Schnittstelle. Klasse ConcreteComponent implementiert die Komponente {@Override public void operation () {System.out.println ("Anfangsverhalten"); }} Dekorateur: Dekorieren Sie die abstrakte Klasse, erbt die Komponente, erweitert die Funktionen der Komponentenklasse aus externen Klassen, aber für die Komponente müssen die Existenz des Dekorators nicht wissen.
Klassendekorateur implementiert die Komponente {// ein Komponentenobjekt und bilden eine Aggregationsbeziehung mit der Komponentenkomponente der Komponenten. // Das Objekt übergeben wird, um den öffentlichen Dekorateur (Komponentenkomponente) zu modifizieren {this.comPonent = component; } @Override // rufen Sie die ursprüngliche Methode auf, um public void operation () {component.operation () zu modifizieren; }} ConcretEDecorator: Spezifische dekorative Objekte spielen die Funktion des Hinzufügens von Verantwortlichkeiten zu Komponenten.
Klasse ConcretEDeCoratora erweitert Dekorateur {private String addState = "New Property 1"; public concretedEcoratora (Komponentenkomponente) {Super (Komponente); } public void operation () {Super.operation (); System.out.println ("Attribut hinzufügen:" + addiertstate); }} Klasse ConcretEDeCoratorB erweitert Dekorateur {public ConcretEDeCoratorB (Komponentenkomponente) {Super (Komponente); } public void operation () {Super.operation (); AddBehavior (); } public void addabehavior () {System.out.println ("Verhalten hinzufügen"); }} Testcode
public class DecoratorsPattern {public static void main (String [] args) {component component = new ConcreteComponent (); component.operation (); System.out.println("================================================================================================== =======================================================ieben ================================================================= =======================================================ieben =======================================================ieben =======================================================ieben ================================================================= System.out.println("================================================================================================ System.out.output(); }} Auslaufergebnisse
Anfänglich behavior======================================================== ====================================================================== ====================================================================== ======================================================================
2. Anwendungsszenarien
1. Sie müssen einem Objekt dynamisch und transparent Verantwortlichkeiten hinzufügen, dh es betrifft andere Objekte nicht.
2. Sie müssen einem Objekt dynamisch Funktionen hinzufügen, und diese Funktionen können dynamisch rückgängig gemacht werden.
3.. Es ist notwendig, eine große Anzahl von Funktionen hinzuzufügen, die durch die Anordnung und Kombination einiger grundlegender Funktionen erzeugt werden, damit die Vererbungsbeziehung unrealistisch wird.
4. Wenn die Methode zur Erzeugung von Unterklassen nicht zur Ausdehnung verwendet werden kann. Ein Szenario ist, dass es möglicherweise eine große Anzahl unabhängiger Erweiterungen gibt, die eine große Anzahl von Unterklassen erzeugen, um jede Kombination zu unterstützen, wodurch die Anzahl der Unterklassen explodiert. Ein weiterer Fall kann darauf zurückzuführen sein, dass die Klassendefinition versteckt ist oder die Klassendefinition nicht zur Generierung von Unterklassen verwendet werden kann.
3. Schlüsselpunkte
1. Dekorative Objekte und reale Objekte haben die gleiche Schnittstelle. Auf diese Weise kann das Client -Objekt mit dem dekorativen Objekt auf die gleiche Weise wie das reale Objekt interagieren.
2. Das dekorative Objekt enthält einen Verweis auf ein reales Objekt.
3. Das dekorative Objekt akzeptiert alle Anfragen vom Kunden. Es leitet diese Anfragen an das reale Objekt weiter.
4. Dekorative Objekte können einige zusätzliche Funktionen vor oder nach dem Weiterleiten dieser Anfragen hinzufügen. Dies stellt sicher, dass zur Laufzeit zusätzliche Funktionen extern hinzugefügt werden können, ohne die Struktur eines bestimmten Objekts zu ändern. Bei objektorientiertem Design werden funktionale Erweiterungen zu einer bestimmten Klasse normalerweise durch Vererbung erreicht.
Das obige ist eine Einführung in die relevanten Inhalte über den Java Decorator -Modus. Ich hoffe, es wird für das Lernen aller hilfreich sein.