Decorator Pattern in der Java API

Ulfmann

Mitglied
Guten Morgen allerseits,

ich sitze grade an einer Dokumentation für ein Gruppen-Projekt, in dem es um die Umsetzung eines Entwurfsmusters (GoF) geht. Unsere Wahl fiel auf den Decorator und um dem Ganzen einen angemessenen, theoretischen Rahmen zu geben, möchte ich demonstrieren, wo und wie das Pattern in der Java API verwendet wird.

Könnte mich jemand in Richtung einer Stelle stubsen außer zu den Streams (bzw. Reader und Writer)? Ich hätte gern ein weiteres Beispiel, was vielleicht nicht ganz so gängig ist.

Jemand eine Idee?
Danke schonmal.
 
List l = new ArrayList();
l = Collections.unmodifiableList(l);

liefert eine Liste die Daten aus dem Original durchreicht, aber Änderungen mit Exceptions quittiert
 
also BorderDecorator aus dem Beispiel dort ist eine selbstgeschriebene Klasse,
in Swing an sich wüßte ich jetzt auf Anhieb keine, obwohl es das sicher gibt,

wenn ein JPanel andere Komponenten enthält ist das jedenfalls kein Decorator,
auch nicht komplexe feste Komponenten wie JComboBox, die mehrere feste Teilkomponenten verwenden,
auch ein TableRenderer, der ein JLabel zum Zeichnen benutzt, fällt kaum unter diese Kategorie,

ein Decorator muss schon exakt das Original-Interface erfüllen, als ein solches Objekt agieren, nur intern die Aufrufe weiterleiten

--

edit:
AWTEventMulticaster habe ich vor langer Zeit mal gesehen, der nimmt zwei beliebige Listener auf, ist selber auch ein Listener aller möglichen Arten, und leitet die Events an die enthaltenen Listener weiter,
aber sehr speziell, den trifft man selber eher nie an

Java:
public class AWTEventMulticaster implements 
    ComponentListener, ContainerListener, FocusListener, KeyListener,
    MouseListener, MouseMotionListener, WindowListener, WindowFocusListener,
    WindowStateListener, ActionListener, ItemListener, AdjustmentListener,
    TextListener, InputMethodListener, HierarchyListener,
    HierarchyBoundsListener, MouseWheelListener {

    protected final EventListener a, b;


    /**
     * Handles the componentResized event by invoking the
     * componentResized methods on listener-a and listener-b.
     * @param e the component event
     */
    public void componentResized(ComponentEvent e) {
        ((ComponentListener)a).componentResized(e);
        ((ComponentListener)b).componentResized(e);
    }
 
Zuletzt bearbeitet von einem Moderator:
Sehr cool, danke nochmals. Genau nach so etwas habe ich gesucht.

Das Beispiel mit dem EventMulticaster lasse ich aber vielleicht besser weg. Einerseits könnte ich da schnell unbeabsichtigt Fehler einbauen und andererseits (und infolge dessen) in Gefahr laufen, dass ich des Plagiarismus beschuldigt werde 😉
Ich finde, aus fachlicher Sicht genügt es, wenn ich
  • java.io.InputStream
  • Eine (besagte) Unterklasse von JComponent und eventuell
etwas näher betrachte.
 

Zurück
Oben