Was ist das Decorator-Muster?
Fügen Sie einem Objekt dynamisch einige zusätzliche Verantwortlichkeiten hinzu. Im Hinblick auf das Hinzufügen von Funktionalität ist das Decorator-Muster flexibler als das Generieren von Unterklassen.
1. Struktur
Komponente: Definieren Sie eine Objektschnittstelle, die diesen Objekten dynamisch Verantwortlichkeiten hinzufügen kann.
1 2 3 4 5 6 7 8 9 10 |
|
Decorator: Dekorative abstrakte Klasse, die Component erbt und die Funktionen der Component-Klasse von externen Klassen erweitert, aber für Component besteht keine Notwendigkeit, die Existenz von Decorator zu kennen.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
ConcreteDecorator: Ein spezifisches Dekorationsobjekt, das die Funktion hat, der Komponente Verantwortlichkeiten hinzuzufügen.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
|
Testcode
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
Laufergebnis
1 2 3 4 5 6 7 8 |
|
2. Anwendungsszenarien
1. Es ist notwendig, einem Objekt dynamisch und transparent Verantwortlichkeiten hinzuzufügen, das heißt ohne Auswirkungen auf andere Objekte.
2. Funktionen müssen einem Objekt dynamisch hinzugefügt werden und diese Funktionen können dynamisch widerrufen werden.
3. Durch die Permutation und Kombination einiger Grundfunktionen müssen sehr viele Funktionen hinzugefügt werden, was die Vererbungsbeziehung unrealistisch macht.
4. Wenn die Methode zum Generieren von Unterklassen nicht zur Erweiterung verwendet werden kann. In einem Fall gibt es möglicherweise eine große Anzahl unabhängiger Erweiterungen und es wird eine große Anzahl von Unterklassen generiert, um jede Kombination zu unterstützen, wodurch die Anzahl der Unterklassen explodiert. Ein anderer Fall könnte sein, dass die Klassendefinition ausgeblendet ist oder nicht zum Generieren von Unterklassen verwendet werden kann.
3. Wichtige Punkte
1. Dekorierte Objekte und reale Objekte haben die gleiche Schnittstelle. Auf diese Weise kann das Client-Objekt mit dem dekorierten Objekt auf die gleiche Weise interagieren wie ein reales Objekt.
2. Das Dekorationsobjekt enthält einen Verweis auf das reale Objekt.
3. Das Dekorationsobjekt nimmt alle Wünsche des Auftraggebers entgegen. Es leitet diese Anfragen an die realen Objekte weiter.
4. Das Dekorationsobjekt kann vor oder nach der Weiterleitung dieser Anfragen einige zusätzliche Funktionen hinzufügen. Dadurch wird sichergestellt, dass zusätzliche Funktionalität zur Laufzeit extern hinzugefügt werden kann, ohne die Struktur eines bestimmten Objekts zu ändern. Beim objektorientierten Design wird die funktionale Erweiterung einer bestimmten Klasse normalerweise durch Vererbung implementiert.
Das Obige ist eine Einführung in das Java-Decorator-Muster. Ich hoffe, es wird für das Lernen aller hilfreich sein.
Weitere Artikel zum Dekoratormuster in der Java-Designmusterserie finden Sie auf der chinesischen PHP-Website!