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

高洛峰
Freigeben: 2017-01-19 15:53:59
Original
1167 Leute haben es durchsucht

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!

Verwandte Etiketten:
Quelle:php.cn
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage