Dieser Artikel beschreibt einen Fall von gefärbten gedämpften Brötchen, die von Java auf der Grundlage des Dekorationsmusters implementiert werden. Teilen Sie es für Ihre Referenz wie folgt weiter:
1. Musterdefinition
Das Dekorationsmuster erweitert eine Objektfunktion dynamisch, ohne die Originaldatei zu ändern und die Vererbung zu verwenden. Es wickelt das reale Objekt durch Erstellen eines Verpackungsobjekts, dh Dekoration.
Dekorative Objekte und reale Objekte haben die gleiche Schnittstelle, so dass Client -Objekte mit dekorativen Objekten auf die gleiche Weise wie reale Objekte interagieren können.
Ein dekoratives Objekt enthält einen Verweis auf ein reales Objekt.
2. Beispiele des Modells
1. Musteranalyse
Wir verwenden den Fall von schwarzherzigen Anbietern, um gefärbte Brötchen zu machen, um dieses Modell zu veranschaulichen.
2. Dekoratormodus Statische Klassendiagramm
3. Codebeispiel
3.1 Erstellen Sie eine gedämpfte Brötchenschnittstelle - iBread
Paket com.demo.abs;/** * Steamed Bun Processing Interface * * @Author * */public interface ibread {// Die Materialien public void prepair () bereiten; // Harmony Public Void Kneflour (); // Dampfbrötchen öffentlich void gedämpft (); / *** Verarbeitung gedämpfter Brötchen*/ public void Process ();}3.2 Implementierung von normaler Brötchen - Normalbread
Paket com.demo.abs;/** * Implementierung von normalen gedämpften Brötchen * * @Author * */öffentliche Klasse Normalbread implementiert ibread {// Die Zutaten public void prepair () {System.out.Out.println ("Mehl, Wasser und Backpulver vorbereiten ..."); } // Hemian public void kneflour () {System.out.println ("hmian ..."); } // Steamed Buns public void Steamed () {System.out.println ("gedämpfte Brötchen ... Die duftenden gedämpften Brötchen sind aus dem Ofen!"); } / *** Verarbeitung gedämpfter Brötchen* / public void process () {// Die Zutaten prepair () bereiten; // kneadflour (); // gedämpft gedämpft (); }}3.3 Erstellen Sie einen abstrakten Dekorateur - AbstractBread
Paket com.demo.decorator; import com.demo.abs.ibread;/** * abstrakter Dekorateur * * @Author * */public abstract Class AbstractBread Implements Ibread {// eingehende IBREAD -Objekt private endgültige Ibread -Brot speichern; public AbstractBread (Ibread Bread) {this.bread = Bread; } // das Material public void prepe () {this.bread.prepair () vorbereiten; } // sanft public void kneflour () {this.bread.Kneadflour (); } // Steamed Buns public void Steamed () {this.bread.steamed (); } // Steamed Buns public void process () {prepair () verarbeiten; Kneflour (); gedämpft (); }}3.4 Erstellen Sie einen Farbstoff -Dekorateur - Corndecorator
Paket com.demo.decorator; import com.demo.abs.ibread;/** * dyeed corn buns * * @Author * */public class Corndecorator erweitert AbstractBread {// Methode der Methode, die öffentliche CornDecorator (Ibread Bread) {Super (Brot) konstruiert; } // Schwarzherzig-Anbieter haben begonnen, public void Paint () {System.out.println ("Zitronengelb fügen Sie Colorant hinzu ..."); } // Überlastung der Teig -Methode der übergeordneten Klasse @Override public void kniete () {// this.paint () wird gestartet, nachdem er dem Mehl Farbstoff hinzugefügt hat; // Super.kneadfour () einfügen; }}3.5 Erstellen Sie einen Skalypse -Dekorateur - SweetDecorator
Paket com.demo.decorator; import com.demo.abs.ibread;/** * Cyperus Steamed Bun * * @Author * */public class SweetDecorator erweitert AbstractBread {// Methode der Veröffentlichung der Methode public SweetDeCorator (Ibread Bread) {Super (Brot); } // Schwarzherzig-Anbieter fügen Cyperus public void Paint () {System.out.println ("Cyperus hinzufügen ...") hinzu; } // Überlastung der Teig -Methode der übergeordneten Klasse @Override public void kniete () {// Teig this.paint () nach hinzugefügtem Cyperus zu Mehl hinzugefügt; // Hemma super.kneadflour (); }}3.6 produzieren dampfte Brötchen mit Zuckermais - Kunde
Paket com.demo; import com.demo.abs.bread; import com.demo.abs.normalbread; import com.demo.decorator.cornDecorator; // Produktion von dekorativen gedämpften Brötchen system.out.println ("/n ====== Dekorative gedämpfte Brötchen starten !!!"); // Erstellen Sie eine normale normale, gedämpfte Bun -Instanz // Dies ist eine Objektinstanz, die wir einwickeln (dekorieren). // Beginnen Sie, die normalen gedämpften Brötchen zu dekorieren! ! ! // Saccharin verwenden, um die gedämpften Brötchen Normalbread = neuer Süßehörer (Normalbread) zu dekorieren; // Verwenden Sie Zitronengelbfarbe, um die gedämpften Brötchen normalbread = neuer Corndecorator (Normalbread) zu dekorieren; // Produktion von gedämpften Brötchen Information Normalbread.Process (); System.out.println ("===== Dekorieren Sie die gedämpften Brötchen Ende !!!"); }}4. Betriebsergebnisse
==== Fangen Sie an, gedämpfte Brötchen zu dekorieren! ! !
Bereiten Sie Mehl, Wasser und Backpulver vor ...
Fügen Sie Zitronengelbfarbe hinzu ...
Fügen Sie Cyanin hinzu ...
Fett...
Gedämpfte Brötchen ... Die duftenden gedämpften Brötchen sind aus dem Ofen!
==== Das dekorative gedämpfte Brötchen endet! ! !
3. Die Designprinzipien dieses Modells
1 Teil des geschlossenen Wechsels
2 "offen und schließen" Prinzip
3 abstrakt orientierte Programmierung
4. bevorzugen eher Kombinationen als die Vererbung
4. Verwenden Sie Anlässe
1. Wenn wir einem vorhandenen Objekt dynamisch eine neue Funktion oder Verantwortung hinzufügen müssen, können wir das Dekorationsmuster in Betracht ziehen.
2. Wenn sich die Verantwortlichkeiten eines Objekts häufig ändern oder die Verantwortlichkeiten dynamisch erhöht werden müssen, vermeiden Sie es, eine inhärisierte Unterklasse -Expansion hinzuzufügen, um sich an solche Änderungen anzupassen, da diese Methode dazu führt, dass sich die Unterklasse zu schnell erweitert und schwer zu kontrollieren ist. Zu diesem Zeitpunkt kann der Dekorationsmodus verwendet werden.
5. Dekoratormodus Statische Klassendiagramm
Für weitere Informationen zu Java -Algorithmen können Leser, die an dieser Website interessiert sind, die Themen "Java -Datenstruktur und Algorithmus -Tutorial", "Zusammenfassung der Java -Operation DOM -Knoten -Tipps", "Zusammenfassung der Java -Datei- und Verzeichnisoperationstipps" und "Zusammenfassung der Java -Cache -Operation Tipps" anzeigen
Ich hoffe, dieser Artikel wird für Java -Programme aller hilfreich sein.