Das Dekorationsmuster kann einem Objekt dynamisch einige zusätzliche Verantwortung hinzufügen. Im Hinblick auf das Hinzufügen von Funktionen ist der Dekoratormodus flexibler als die Erzeugung von Unterklassen.
Die anwendbare Umgebung für diesen Modus ist:
(1) Fügen Sie einem einzelnen Objekt auf dynamische und transparente Weise Verantwortlichkeiten hinzu, ohne andere Objekte zu beeinflussen.
(2) übernehmen diese Verantwortlichkeiten, die widerrufen werden können.
(3) 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.
Schlüsselschritte zur Implementierung dieses Modus:
(1) Komponente (die Grundklasse des dekorierten Objekts): Definiert die Schnittstelle des Objekts, die diesen Objekten dynamisch Verantwortlichkeiten hinzufügen kann;
(2) ConcreTecomponent (spezifisches dekoratives Objekt): Definiert ein bestimmtes Objekt, und der Dekorateur kann ihm zusätzliche Verantwortung hinzufügen;
(3) Dekorateur (Dekorateur abstrakte Klasse): Behält einen Verweis auf die Komponenteninstanz bei und definiert eine Schnittstelle, die mit der Komponente übereinstimmt ( dh die Grundklasse des dekorierten Objekts zu erben oder zu implementieren );
(4) ConcretedCorator: ein spezifisches dekoratives Objekt, das den spezifischen dekorativen Objekten, die intern gehalten werden, spezifische Verantwortung hinzufügen;
Dies kann für alle ein bisschen schwierig sein, das zu verstehen, also sind wir immer noch ruhig:
Nach dem Winter wurde das Wetter immer kälter. Nach der Arbeit als Veteran -Feinschmecker wäre es toll, einen Termin mit zwei oder drei Freunden zu vereinbaren, um ein heißes Pot -Fest zu haben. Apropos heißer Topf, ich muss den Heißtopf von Dalong erwähnen, den ich in Chengdu gegessen habe, mit allen Arten von Topfboden und Beilagen, aber mein Favorit ist der ursprüngliche Topfboden von Dalong Hot Pot, würzige Beef, Dadao -Müßigkeit, Tianwei Wurst, Tuotuo -Rindfleisch, würzige Ribs usw. Ich kann sogar über die ich überlegen.
Wenn es darum geht, sollten Sie ein wenig darüber fühlen. Der oben erwähnte Topfboden ist eigentlich die Basis des dekorativen Objekts . Die Zutaten sind eigentlich das dekorative abstrakte Objekt . Die spezifischen Topfboden des Original -Topfbodens von Dalong Hot Pot sind die spezifischen dekorativen Objekte. Die verschiedenen Beilagen, die zum Dekorieren des Topfbodens verwendet werden, sind die spezifischen dekorativen Objekte . Apropos, jeder hätte es plötzlich erkannt haben sollen. Beginnen wir die spezifische Code -Implementierung:
Schritt 1: Definieren Sie die Grundklasse des dekorierten Objekts (kann abstrakte Klasse oder Schnittstelle sein)
öffentliche Schnittstelle Guodi {public float cost (); // Natürlich muss der Pot unten preisgünstig werden öffentliche String -Name (); // Der Name muss auch verfügbar sein} Schritt 2: Definieren Sie das spezifische dekorative Objekt (dh verschiedene Topfboden, zwei sind hier definiert)
public class yuanyang implementiert Guodi {@Override public float cost () {return 48.0f; } @Override public String name () {return "Double Pot Base"; }} öffentliche Klasse Dalongyan implementiert Guodi {@Override public float cost () {return 59.0f; } @Override public String name () {return "Dalong Hot Pot Original Pot Base"; }}Schritt 3: Definieren Sie die dekoratorische abstrakte Klasse
öffentliche Abstract -Klasse Peicai implementiert Guodi {private Guodi Guodi; public foodDecorator (Guodi Guodi) {Super (); this.guodi = Guodi; } @Override public float cost () {return guodi.cost (); } @Override public String name () {return guodi.name (); }}Schritt 4: Definieren Sie das spezifische Dekoratorobjekt
Public Class Malaniurou erweitert Peicai {public Malaniurou (Guodi Guodi) {Super (Guodi); } @Override public float cost () {return super.cost ()+46f; } @Override public String name () {return Super.name ()+"+würziges Rindfleisch"; }} public class maodu erweitert peicai {public maodu (Guodi Guodi) {Super (Guodi); } @Override public float cost () {return super.cost ()+30f; } @Override public String name () {return super.name ()+"+großer Messertripe"; }}Testklasse:
public class test {public static void main (String [] args) {Guodi Guodi = New Dalongyan (); // einen Dalong Hot Pot Original Pot Bottom Malaniurou y = New Malaniurou (Guodi); // würzige Rindfleisch -Maodu x = new maodu (y); Bestellungen "+x.Name ()+", konsumieren "+s.cost ()); }}Ausgangsergebnis:
1. Insgesamt wurden Dalong Hotpot Original Pot Bottom + würziges Rindfleisch + Dadao -Mühe bestellt und insgesamt 135 verbraucht
Das obige ist das Java Decorator -Modell, das Ihnen vom Herausgeber vorgestellt wurde (das Code -Prinzip aus der Perspektive realer Leben zu verstehen). Ich hoffe, es wird für alle hilfreich sein. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht und der Editor wird allen rechtzeitig antworten. Vielen Dank für Ihre Unterstützung auf der Wulin.com -Website!