Klassifizierung |
objektbasiertes Strukturmuster
|
|
mit starken Bezügen zu Erzeugungsmustern
|
| |
Zweck |
viele Objekte mit gleichem unveränderlichen
Zustand zu einem gemeinsamen zusammenfassen
und die Referenzen mehrfach nutzen.
|
| |
|
Muster zur Speicherplatzoptimierung
|
| |
Alias |
flyweight
|
| |
Motivation |
hierarchische Dokumentenstruktur
|
| |
|
alle Elemente haben ähnliche Eigenschaften
auch die einfachen Zeichen, die Blätter
|
| |
|
für jedes Zeichen, jedes Blatt, ein neues Objekt
erzeugen
|
|
Speicher, Laufzeit
|
| |
Idee |
einfache Objekte, Zeichen, nur einmal erzeugen und gemeinsam
nutzen
|
| |
Anwendbarkeit |
|
|
eine Anwendung verwendet viele Objekte
|
|
die Speicherkosten sind wegen der # der Objekte zu hoch
|
|
die Objekte verändern ihren Zustand nicht
|
|
viele Objekte besitzen den gleichen Zustand
|
| |
Struktur |
Strukturdiagramm
|
| |
Teilnehmer |
|
Fliegengewicht |
abstrakt
Schnittstelle
|
KonkretesFliegengewicht |
konkret
Klasse für Objekte, die ihren Zustand nicht ändern
und die häufiger benötigt werden
|
AnderesFliegengewicht |
konkret
Klasse für Objekte, die ihren Zustand ändern
oder selten benötigt werden
|
FliegengewichtFabrik |
konkret
Klasse zur Erzeugung von Fliegengewicht-Objekten
zur Verwaltung der Referenzen auf gemeinsam genutzte Objekte
|
| |
Konsequenzen |
|
|
Fliegengewichte dürfen ihren Zustand nicht ändern
|
|
--> funktionale Programmierung
|
|
alle variierbare Information muss aus dem Kontext
an die Methoden der Fliegengewicht-Objekte
über Parameter mitgegeben werden
|
|
Fliegengewichte werden einmal erzeugt und nie geändert
Verhalten wie Konstanten
|
|
Blätter eines Kompositums sind gute Kandidaten
für Fliegengewichte
|
|
entscheidend: Erzeugung
|
|
|
| |
Implementierung |
|
|
Vergleiche können auf Referenzvergleiche zurückgeführt werden
|
|
intrinsischer Zustand: Zustand im Objekt
|
|
extrinsischer Zustand: Information aus Parametern
|
|
Speichergewinn hängt von der # der gemeinsam genutzten
Objekte ab
|
|
hängt von der # der Objekte für den extrinsischen
Zustand ab
|
| |
Beispiele |
|
|
|
|
|
| |
Bekannte Verwendungen |
in funktionaler Programmierung - geht auch mit OOP -
wird sehr, sehr viel mit Fliegengewichten gearbeitet.
Ganze Teilstrukturen können gemeinsam genutzt werden.
|
| |
verwandte Muster |
|
|
Implementierung der Blätter eines Kompositums als Fliegengewichte
|
| |
|
Erzeugungsmuster für Fliegengewichte
|
| |
|
zur Speicherung des extrinsischen Zustands
|
| |