Dieser Artikel beschreibt die Prinzipien und die Verwendung von dekorativen Modi von Java -Designmustern. Teilen Sie es für Ihre Referenz wie folgt weiter:
Der dekorative Modus kann die Funktionalität eines Objekts dynamisch erweitern, ohne die Originaldatei zu ändern und die Vererbung zu verwenden. Es wickelt das reale Objekt durch Erstellen eines Wrapper -Objekts, dh Dekoration. Das Design von IO in JDK verwendet den dekorativen Modus, der die Funktion erweitern kann, indem der Knotenfluss durch den Filterfluss einwickelt.
Die Zusammensetzung des Charakters im dekorativen Modus:
① Zusammenfassung Komponentenrolle: Geben Sie eine abstrakte Schnittstelle zur Standardisierung von Objekten, die darauf vorbereitet sind, Verarbeitungsfunktionen zu erhalten. (InputStream, OutputStream)
② Konkrete Komponentenrolle: Definiert eine Klasse, die zusätzliche Funktionen erhält. (Knotenfluss)
③ Rolle der Dekorateure: Hält eine Instanz eines Komponentenobjekts und implementiert eine Schnittstelle, die mit der abstrakten Komponentenschnittstelle übereinstimmt. (FilterInputStream, FilteroutputStream)
④ Rolle der Betondekorateure: Verantwortlich für das Hinzufügen zusätzlicher Funktionen zu Komponentenobjekten. (Filterfluss mit spezifischen zusätzlichen Funktionen, BufferedInputStream, DataNputStream usw.)
Hier ist ein einfaches Beispiel für ein dekoratives Muster:
1.. Abstrakte Komponentenrolle : Definieren Sie eine Grenzflächenkomponente
Paket com.tydic.Decorator; // Abstract Component Rolle öffentliche Schnittstellenkomponente {public void dosomething ();}2. Spezifische Baurollen : Sie müssen abstrakte Komponentenrollen implementieren und diesem Objekt einige Verantwortung hinzufügen.
Paket com.tydic.Decorator;/** * Konkrete Rollenkonstruktion, Zusammenfassung der Rollenkonstruktion implementieren. }}
3.. Dekorieren Sie die Rolle : Halten Sie ein Objekt, um einen Verweis auf die Rolle zu erstellen und abstrakte Komponentenrollen zu implementieren. Die Rolle der abstrakten Komponenten wird implementiert, da der Typ nach dem Hinzufügen von Funktionen nicht geändert werden kann, genau wie FilterInputStream immer noch ein Eingabestream ist, der immer noch die Eigenschaften eines Eingangsstroms aufweist. Der Verweis auf eine Rolle auf dem Objektaufbau ist, weil Sie, um Funktionen hinzuzufügen, einen Hinweis auf die Komponentenrolle haben müssen, an die die Funktion beigefügt werden soll.
Paket com.tydic.Decorator;/*** Dekorieren Sie die Rolle, halten Sie einen Verweis auf eine Komponentenrolle und implementieren Sie die Komponentenrolle* Wenn Sie eine Funktion hinzufügen möchten, müssen Sie die Komponentenrolle implementieren. Um eine Funktion hinzuzufügen, müssen Sie einen Verweis auf die zugefügte Komponentenrolle halten. Aus diesem Grund müssen Sie einen Verweis auf die Komponentenrolle halten * @Author Administrator * */öffentlicher Klassendekorateur Implements Komponente {private Komponentenkomponente; // Dies ist die zugeordnete Komponentenrolle, die in der sofortigen öffentlichen Dekorateurin (Komponentenkomponente) {this.comPonent = component = component; } @Override public void dosomething () {component.dosomething (); }}4. Spezifische dekorative Rolle : Dekorative Rollen müssen vererbt und die zu befestigten Funktionen angegeben werden.
Paket com.tydic.Decorator;/** * Für eine bestimmte dekorative Rolle 1 muss die dekorative Rolle vererbt und die zu angeschlossenen Funktionen angegeben werden * @Author Administrator * */Public Class ConcreteDeCorator1 erweitert Dekorateur {Public ConcretedCorator1 (Komponentenkomponenten) {Super (Komponenten); } @Override public void dosomething () {super.dosomething (); this.doanothing (); // Funktionen auf der Grundlage der ursprünglichen Funktionen der spezifischen Komponentenrollen hinzufügen} // Zusätzliche Funktionen public void doanothing () {System.out.println ("Funktion B"); }} Paket com.tydic.Decorator;/** * Für bestimmte dekorative Rolle 2 muss die dekorative Rolle vererbt und die zu angeschlossenen Funktionen angegeben werden * @Author Administrator * */Public Class ConcreteDeCorator2 erweitert Dekorateur {Public ConcretedCorator2 (Komponentenkomponenten) {Super (Komponenten); } @Override public void dosomething () {super.dosomething (); this.doanothing (); // zusätzliche Funktionen public void doanothing () {System.out.println ("Funktion c"); }}5. Client -Code schreiben
Paket com.tydic.Decorator; Public Class Client {public static void main (String [] args) {Komponentenkomponente = new ConcreTecomponent (); // Konstruieren Sie die Rollenkomponentenkomponent2 = Neue ConcretEDecorator1 (Komponente); // Die Komponentenkomponentenkomponentenkomponentenkomponentenkomponenten entwerfen. component3.dosomething (); }}Zusammenfassen:
Der dekorative Modus kann die Kombinationsmethode verwenden und Objekte zur Laufzeit ohne Vererbung dynamisch erweitern. Dies ist etwas, was die Vererbung nicht tun kann. Die Vererbung ist statisch, eine Erweiterung der Klasse.
Vor- und Nachteile des dekorativen Modus:
Vorteile: 1. Erweitern Sie die Funktion des Objekts, die flexibler als Vererbung ist. 2. Durch die Verwendung verschiedener spezifischer dekorativer Kategorien sowie die Anordnung und Kombination dieser dekorativen Kategorien können Designer viele Kombinationen unterschiedlicher Verhaltensweisen schaffen.
Nachteile: Das Programm wird komplizierter.
For more Java-related content, readers who are interested in this site can view the topics: "Introduction and Advanced Tutorial on Java Object-Oriented Programming", "Tutorial on Java Data Structure and Algorithm", "Summary of Java Operation DOM Node Skills", "Summary of Java File and Directory Operation Skills" and "Summary of Java Cache Operation Skills"
Ich hoffe, dieser Artikel wird für Java -Programme aller hilfreich sein.