Konzept
Das Dekorationsmuster findet dynamisch Verantwortung an das Objekt. Um die Funktionalität zu erweitern, bietet der Dekorateur eine flexiblere Alternative als die Vererbung.
Der Dekorateur und das dekorierte Objekt haben den gleichen Supertyp.
Sie können ein Objekt mit einem oder mehreren Dekoratoren einwickeln.
Da der Dekorateur und das dekorierte Objekt denselben Supertyp haben, kann das dekorierte Objekt bei jeder Gelegenheit, bei der das ursprüngliche Objekt (geschrieben) erforderlich ist, durch ihn ersetzt werden.
Der Dekorateur kann sein eigenes Verhalten vor und/oder nach den Handlungen des Dekorateurs hinzufügen, der beauftragt wird, einen bestimmten Zweck zu erreichen.
Objekte können jederzeit dekoriert werden, sodass Objekte während der Laufzeit dynamisch und unbegrenzt mit Ihrem Lieblingsdekorator dekoriert werden können.
In Java sind viele Klassen unter dem IO -Paket die Verkörperung typischer Dekorationsmuster, wie zum Beispiel:
Die dekorative Klasse implementiert dieselbe Schnittstelle wie die dekorierte Klasse.
Die dekorierte Klasse kümmert sich nicht darum, mit welcher Implementierungsklasse sie verwendet wird, um sie zu dekorieren.
Die gleiche Geschäftsmethode wird von der dekorativen Klasse aufgerufen, um die Funktionen der dekorativen Klasse zu verbessern.
Beispiel:
Klassendiagramm
public interface ireader {void read (); } public class Reader implementiert Ireader {@Override public void read () {System.out.println ("Read of Reader"); }} public class BufferedReader implementiert Ireader {private iReader Mreader; public bufferedReader (iReader reader) {this.mreader = reader; } @Override public void read () {System.out.println ("Read of BufferedReader"); Mreader.Read (); }} public class test {public static void main (String [] args) {reader reader = new reader (); reader.read (); System.out.println ("-----------"); BufferedReader BufferedReader = New BufferedReader (Leser); bufferedReader.read (); }} Merkmale:
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. Dekorieren Sie Objekte können einige zusätzliche Funktionen vor oder nach dem Weiterleiten dieser Anforderungen 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. Nach der Dekoration wird das eigentliche Objekt gehalten, um seine Funktion zu verbessern.
Unterschied zwischen Dekorateur und Adaptermodus:
Über neue Verantwortlichkeiten: Adapter können beim Konvertieren auch neue Verantwortlichkeiten hinzufügen, der Hauptzweck ist jedoch nicht. Das Dekorateurmodell fügt dem Dekorator hauptsächlich neue Verantwortung hinzu.
Über das Objekt, das es wickelt: Der Adapter kennt die Details des Adapters (dh der Adapterklasse). Der Dekorateur weiß nur, was seine Schnittstelle ist.
Was den spezifischen Typ (unabhängig davon, ob es sich um eine Basisklasse oder eine andere abgeleitete Klasse handelt), ist sie nur während der Laufzeit bekannt.