# Verständnisproblem: Flyweight



## Saheeda (18. Okt 2014)

Hallo,

ich lese momentan "Design Patterns: Elements of Reusable Object-Oriented Software" und bin dabei auf zwei Punkte gestoßen, wo ich nicht weiter weiß.

Was ich bisher über das Pattern weiß:
- ein Flyweight ist ein gemeinsam genutztes Objekt, d.h., ich habe einen "Pool", wo alle Flyweights drin liegen. Wenn ich eines brauche, erstelle ich es nicht komplett neu, sondern hole mir das benötigte
- es wird benutzt, um große Mengen gleicher Daten schlanker zu gestalten

- man unterscheidet intrinsische und extrinsische Zustände. 
Als Beispiel: Ich möchte eine Stadt simulieren und nehme z.B. "Mehrfamilienhaus" als ein Flyweight.
Ein intrinsischer Zustand wäre hier z.B. die maximale Anzahl der Bewohner oder das Aussehen des Hauses.
Ein extrinsischer Zustand wäre z.B. der Standort/das Viertel.
Damit hätte ich intern immer nur ein Objekt "Mehrfamilienhaus", das aber in unterschiedlichen Vierteln der Stadt stehen und unterschiedliche Standortwerte haben kann.




> Apply the Flyweight pattern when all of the following are true:
> [...]
> - Many groups of objects may be replaced by relatively few shared objects *once extrinsic state is removed.*


Übersetzen würde ich den Satz so:
"Viele Objektgruppen können durch relativ wenige gemeinsam genutzte Objekte ersetzt werden, sobald der extrinsische Zustand entfernt wird."


Allerdings ergibt der fett-markierte Teil gerade keinen Sinn für mich. Kann mir das bitte jemand erklären? Oder habe ich ganz woanders etwas falsch verstanden?



> - The application doesn't depend on object identity. Since flyweight objects may be shared, identity tests will return true for conceptually distinct objects.


Das heißt, eine Benutzerverwaltung o.ä. wäre hier falsch, da mich immer ganz konkrete Benutzer interessieren?
Wo wird das Pattern (in der Praxis) wirklich eingesetzt? Viele Beispiele, die ich über Google finde, kommen mir sehr konstruiert vor.


----------

