Heim Java javaLernprogramm Beispiele zur Erläuterung der Verwendung des Decorator-Musters in der Java-Entwurfsmusterprogrammierung

Beispiele zur Erläuterung der Verwendung des Decorator-Musters in der Java-Entwurfsmusterprogrammierung

Jan 19, 2017 pm 03:53 PM

Konzept

Das Dekoratormuster ordnet Objekten dynamisch Verantwortlichkeiten zu. Um die Funktionalität zu erweitern, bieten Dekoratoren eine flexiblere Alternative zur Vererbung.

Beispiele zur Erläuterung der Verwendung des Decorator-Musters in der Java-Entwurfsmusterprogrammierung


Der Dekorateur und das dekorierte Objekt haben denselben Supertyp.
Sie können ein Objekt mit einem oder mehreren Dekoratoren umhüllen.
Da der Dekorateur und das dekorierte Objekt denselben Supertyp haben, kann jedes Mal, wenn das Originalobjekt (verpackt) benötigt wird, stattdessen das dekorierte Objekt verwendet werden.
Der Dekorateur kann sein eigenes Verhalten vor und/oder nach dem Verhalten des delegierten Dekorateurs hinzufügen, um einen bestimmten Zweck zu erreichen.
Objekte können jederzeit dekoriert werden, sodass Sie
Objekte zur Laufzeit dynamisch und unbegrenzt mit Ihren bevorzugten Dekorateuren dekorieren können.

In Java sind viele Klassen unter dem io-Paket die Verkörperung des typischen Dekoratormusters, wie zum Beispiel:

new BufferedOutputStream(OutputStream out)

new BufferedInputStream(InputStream in );

neuer PrintWriter(OutputStream out)

neuer FilterReader(Reader in);

Die dekorierte Klasse implementiert die gleiche Schnittstelle wie die dekorierte Klasse, und
ist dekorierte Klasse, es spielt keine Rolle, welche Implementierungsklasse zum Dekorieren verwendet wird
Die gleiche Geschäftsmethode, die dekorierte Klasse ruft die Methode der Dekorationsklasse auf, um die Funktion der Dekorationsklasse zu verbessern

Instanz :
Klassendiagramm

Beispiele zur Erläuterung der Verwendung des Decorator-Musters in der Java-Entwurfsmusterprogrammierung

public interface IReader { 
  void read(); 
} 
 
public class Reader implements IReader { 
  
  @Override
  public void read() { 
    System.out.println("read of Reader"); 
  } 
  
} 
 
public class BufferedReader implements 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(reader); 
    bufferedReader.read(); 
  
  } 
}
Nach dem Login kopieren

Eigenschaften:
1. Dekorierte Objekte haben die gleiche Schnittstelle wie echte Objekte. Auf diese Weise kann das Client-Objekt mit dem dekorierten Objekt auf die gleiche Weise interagieren wie ein reales Objekt.
2. Das dekorierte Objekt enthält einen Verweis auf das reale Objekt
3 Das dekorierte Objekt akzeptiert alle Anfragen des Kunden. 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.
Im objektorientierten Design wird die funktionale Erweiterung einer bestimmten Klasse normalerweise durch Vererbung implementiert. Nach der Dekoration wird das reale Objekt festgehalten, um seine Funktionalität zu verbessern.

Der Unterschied zwischen Dekorator- und Adaptermustern:
Über neue Verantwortlichkeiten: Adapter können während der Konvertierung auch neue Verantwortlichkeiten hinzufügen, aber der Hauptzweck liegt hier nicht. Das Dekorationsmuster fügt dem Dekorateur hauptsächlich neue Verantwortlichkeiten hinzu.
Über das Objekt, das er umhüllt: Der Adapter kennt die Details der anzupassenden Person (d. h. die Adapterklasse). Der Dekorateur kennt nur den spezifischen Typ seiner Schnittstelle (ob es sich um eine Basisklasse oder eine andere abgeleitete Klasse handelt) nur zur Laufzeit.

Weitere Beispiele zur Erläuterung der Anwendung des Decorator-Musters in der Java-Designmusterprogrammierung finden Sie auf der chinesischen PHP-Website für verwandte Artikel!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Wie funktioniert der Klassenladungsmechanismus von Java, einschließlich verschiedener Klassenloader und deren Delegationsmodelle? Wie funktioniert der Klassenladungsmechanismus von Java, einschließlich verschiedener Klassenloader und deren Delegationsmodelle? Mar 17, 2025 pm 05:35 PM

Mit der Klassenbelastung von Java wird das Laden, Verknüpfen und Initialisieren von Klassen mithilfe eines hierarchischen Systems mit Bootstrap-, Erweiterungs- und Anwendungsklassenloadern umfasst. Das übergeordnete Delegationsmodell stellt sicher

Wie implementiere ich mehrstufige Caching in Java-Anwendungen mit Bibliotheken wie Koffein oder Guava-Cache? Wie implementiere ich mehrstufige Caching in Java-Anwendungen mit Bibliotheken wie Koffein oder Guava-Cache? Mar 17, 2025 pm 05:44 PM

In dem Artikel wird in der Implementierung von mehrstufigem Caching in Java mithilfe von Koffein- und Guava-Cache zur Verbesserung der Anwendungsleistung erläutert. Es deckt die Einrichtungs-, Integrations- und Leistungsvorteile sowie die Bestrafung des Konfigurations- und Räumungsrichtlinienmanagements ab

Wie kann ich JPA (Java Persistence-API) für Objektrelationszuordnungen mit erweiterten Funktionen wie Caching und faulen Laden verwenden? Wie kann ich JPA (Java Persistence-API) für Objektrelationszuordnungen mit erweiterten Funktionen wie Caching und faulen Laden verwenden? Mar 17, 2025 pm 05:43 PM

In dem Artikel werden mit JPA für Objektrelationszuordnungen mit erweiterten Funktionen wie Caching und faulen Laden erläutert. Es deckt Setup, Entity -Mapping und Best Practices zur Optimierung der Leistung ab und hebt potenzielle Fallstricke hervor. [159 Charaktere]

Wie benutze ich Maven oder Gradle für das fortschrittliche Java -Projektmanagement, die Erstellung von Automatisierung und Abhängigkeitslösung? Wie benutze ich Maven oder Gradle für das fortschrittliche Java -Projektmanagement, die Erstellung von Automatisierung und Abhängigkeitslösung? Mar 17, 2025 pm 05:46 PM

In dem Artikel werden Maven und Gradle für Java -Projektmanagement, Aufbau von Automatisierung und Abhängigkeitslösung erörtert, die ihre Ansätze und Optimierungsstrategien vergleichen.

Wie erstelle und verwende ich benutzerdefinierte Java -Bibliotheken (JAR -Dateien) mit ordnungsgemäßem Versioning und Abhängigkeitsmanagement? Wie erstelle und verwende ich benutzerdefinierte Java -Bibliotheken (JAR -Dateien) mit ordnungsgemäßem Versioning und Abhängigkeitsmanagement? Mar 17, 2025 pm 05:45 PM

In dem Artikel werden benutzerdefinierte Java -Bibliotheken (JAR -Dateien) mit ordnungsgemäßem Versioning- und Abhängigkeitsmanagement erstellt und verwendet, wobei Tools wie Maven und Gradle verwendet werden.

See all articles