Composite Pattern Martin Liersch - MSI HTWG Konstanz Beschreibung ● ● ● ● Klassifikation: Strukturmuster Zweck: Objekte zu einer Baumstruktur zusammensetzen, um Teil/Ganzes-Hierarchien auszudrücken Anwendungsbeispiel: Hierarchie von Grafikobjekten z.B. in Java / AWT (Container & Component) Deutsch: Kompositum Verwandte Pattern ● ● Noch nicht behandelt ● Visitor ● Command Bereits behandelt ● Decorator (z.B. Filter für Streams / Bilddaten) Klassendiagramm Baumstruktur Teilnehmer Komponente ● ● ● Einzige, für den Client sichtbare Schnittstelle Stellt alle nach außen sichtbare Funktionalität zur Verfügung Wird von Blatt und Kompositum implementiert / erweitert Teilnehmer Kompositum ● Implementiert oder erweitert Komponente ● Eine Art Container ● Kann kein oder mehrere Kinder (wiederum Blätter oder Komposita) enthalten Teilnehmer Blatt ● Implementiert oder erweitert Komponente ● Darf keine Kind-Elemente enthalten ● Kann als eine Art Knoten mit 0 Kindern angesehen werden Vor- und Nachteile Vorteile ● ● Einheitliche Behandlung (KomponentenInterface) von Blatt und Kompositum Leicht um neue Blätter und Komposita erweiterbar Nachteile ● Bei zu allgemeinem Entwurf werden evtl. Typ-Überprüfungen zur Laufzeit nötig (instanceof) Beispiel Dateisystem ● Ein Dateisystem besteht aus Dateien ● Verzeichnisse beinhalten Dateien ● Beide können als „Dateisystemelement“ (Node / iNode) bezeichnet werden Beispiel Dateisystem ● ● ● Es gibt gewisse Operationen, welche auf Dateien UND auf Verzeichnisse angewendet werden können Es existieren jedoch auch Operationen, welche nur auf einen Typ anwendbar sind Das Komponenten-Interface muss alle Operationen beinhalten Beispiel Dateisystem Vorgehensweise ● Gegeben: 3 Klassen mit unterschiedlichen Methoden Generiere Komponente, welche später alle Kinder implementieren ● Beispiel Dateisystem