- Flyweight
-
Das Flyweight, auch Fliegengewicht genannt, ist ein Entwurfsmuster aus dem Bereich der Softwareentwicklung und gehört zu der Kategorie der Strukturmuster (Structural Patterns). Es wird verwendet, wenn eine große Anzahl von Objekten benötigt wird, die sich bestimmte variable Informationen teilen und eine herkömmliche Implementierung unverhältnismäßig viele Ressourcen erfordern würde. Das Fliegengewicht ist ein Entwurfsmuster der so genannten GoF-Muster.
Inhaltsverzeichnis
Verwendung
Flyweight wird eingesetzt, wenn es eine große Anzahl Objekte gibt, so dass alleine die Anzahl zu Problemen führt. Ein Teil des Zustandes dieser Objekte kann in den Kontext ausgelagert werden (extrinsisch). Nach der Entfernung des Zustandes reduziert sich die Anzahl verschiedener Objekte auf ein überschaubares Maß.
UML-Diagramm
Akteure
Das Flyweight (Fliegengewicht) ist abstrakt und definiert die Schnittstelle für Objekte, die einen von außen sichtbaren Zustand empfangen und verarbeiten. Das concrete flyweight (Konkretes Fliegengewicht) implementiert die Fliegengewichtschnittstelle. Bei Bedarf wird ein innerer Zustand ergänzt. Exemplare von KonkretesFliegengewicht oder abgeleiteten Klassen werden gemeinsam genutzt. Der intrinsische Zustand muss unabhängig vom Kontext sein.
Das unshared concrete flyweight (Getrennt genutzte konkrete Fliegengewicht) implementiert diese Schnittstelle ebenfalls, enthält allerdings den kompletten Zustand. Das bedeutet, dass diese Objekte nicht gemeinsam genutzt werden. Hierbei handelt es sich nicht mehr im engeren Sinne um Fliegengewichte. Es können sich sogar echte „Schwergewichte“ dahinter verbergen. Es zeigt vielmehr die Stelle, an der „normale“ Objekte ihren Platz in dem Muster finden.
Die flyweight factory (Fliegengewicht-Fabrik) erzeugt und verwaltet Fliegengewichte. Sie stellt auch die korrekte Benutzung der gemeinsam benutzten Objekte sicher. Der client (Klient) verwaltet Referenzen auf Fliegengewichte und den extrinsischen Zustand der Fliegengewichte.
Vorteile
Das Verfahren reduziert Speicherkosten proportional zur Größe des ausgelagerten Zustands und zur Anzahl der Fliegengewichte. Die Speicherkosten sinken weiter, wenn der ausgelagerte Zustand nicht gespeichert werden muss, sondern berechnet werden kann.
Nachteile
Die Komplexität steigt relativ stark, insbesondere bei Designs, die Fliegengewicht gemeinsam mit Kompositum nutzen. Eine saubere Dokumentation der Verantwortlichkeiten ist ein Muss. Die Laufzeitkosten steigen möglicherweise an, da der ausgelagerte Zustand wieder aufgefunden und dem Fliegengewicht beim Methodenaufruf übergeben werden muss. Sie steigen weiter, wenn der Zustand berechnet wird.
Beispiel
Die graphische Darstellung eines Textdokumentes.
Es kann leicht aus Hunderttausenden oder gar Millionen von Zeichen und damit Zeichenobjekten bestehen. Jedes Byte, das man im Zeichenobjekt speichert, wird so unter Umständen zu einem Megabyte. Es ist leicht ersichtlich, dass es inakzeptabel ist, alle Informationen die das Zeichenobjekt benötigt, wirklich im Objekt zu speichern.
Das Zeichenobjekt befindet sich in einem Zeilenobjekt (Kompositum). Die Zeilennummer und die Y-Koordinate auf dem Bildschirm sind für alle Zeichen der Zeile identisch. Sie werden in das Zeilenobjekt verlagert. Die Spaltennummer und die X-Koordinate ergeben sich aus der Position in der Zeile. Das Zeilenobjekt ist verantwortlich, diese zu berechnen. Schriftattribute sind meist für benachbarte Zeichen identisch. Sie werden ebenfalls ausgelagert.
Übrig bleibt alleine der Code des Zeichens. Somit gibt es am Ende lediglich einige hundert unterschiedlicher Zeichenobjekte (zumindest bei Alphabetschriften).
Verwendung in der Analyse
Fliegengewicht ist ein reines Design-Muster, da seine Anwendung vor allem vom Designaspekt Speicherplatz getrieben wird (daneben u. U. vom Aspekt zentraler Update eines sehr globalen Zustands). Die Verwendung von Fliegengewicht in der Analyse ist daher in aller Regel ein Smell.
Verwandte Entwurfsmuster
Das Kompositum bietet sich an, um Fliegengewichte zu hierarchischen Strukturen zusammenzufügen (z.B. Zeichen, Zeile, Absatz, etc.)
Eine Fabrikmethode wird benötigt, um die Fliegengewichte zu erzeugen.
Auch für Zustands- und Strategie-Objekte ist das Fliegengewichtsmuster vorteilhaft.
Das Idiom "immutable object" ist eng verwandt mit dem Fliegengewicht. Fliegengewichte sollten immer als "immutable objects" designt werden.
Erzeugungsmuster: Abstrakte Fabrik | Singleton | Builder | Fabrikmethode | Prototyp
Strukturmuster: Adapter | Brücke | Decorator | Fassade | Flyweight | Kompositum | Stellvertreter
Verhaltensmuster: Observer | Visitor | Interpreter | Iterator | Kommando | Memento | Schablonenmethode | Strategie | Vermittler | Zustand | Zuständigkeitskette
(Klassenmuster sind kursiv dargestellt)
Wikimedia Foundation.
Schlagen Sie auch in anderen Wörterbüchern nach:
Flyweight — is a class in boxing which includes fighters weighing less than 112 lb (51 kg) but above 108 lb (49 kg). Professional boxingThe flyweight division was the last of boxing s eight traditional weight classes to be established. Before 1909, anyone… … Wikipedia
flyweight — ► NOUN ▪ a weight in boxing and other sports intermediate between light flyweight and bantamweight … English terms dictionary
flyweight — [flī′wāt΄] n. a boxer between a junior flyweight and a bantamweight, with a maximum weight of 112 pounds (50.81 kg) adj. of flyweights … English World dictionary
flyweight — noun a) a weight that moves outward depending on centrifugal force. The characters of Sex and the City 2 are flyweight bubbleheads living in a world which rarely requires three sentences in a row. b) a weight division of professional boxing… … Wiktionary
flyweight — UK [ˈflaɪˌweɪt] / US noun [countable] Word forms flyweight : singular flyweight plural flyweights a boxer, wrestler, or weightlifter who is light in weight, usually not more than 112 pounds or 51 kilograms … English dictionary
flyweight — n. 1 a weight in certain sports intermediate between light flyweight and bantamweight, in the amateur boxing scale 48 51 kg but differing for professionals, wrestlers, and weightlifters. 2 a sportsman of this weight. Phrases and idioms: light… … Useful english dictionary
flyweight — [[t]fla͟ɪweɪt[/t]] flyweights N COUNT A flyweight is a boxer who weighs 112 pounds or less … English dictionary
flyweight — noun a weight in boxing and other sports intermediate between light flyweight and bantamweight … English new terms dictionary
Flyweight pattern — Flyweight is a software design pattern. A flyweight is an object that minimizes memory use by sharing as much data as possible with other similar objects; it is a way to use objects in large numbers when a simple repeated representation would use … Wikipedia
Flyweight (patrón de diseño) — Saltar a navegación, búsqueda El patrón Flyweight sirve para eliminar o reducir la redundancia cuando tenemos gran cantidad de objetos que contienen información idéntica, además de lograr un equilibrio entre flexibilidad y rendimiento (uso de… … Wikipedia Español