2011-04-07 4 views
0

L'exemple classique de mise en œuvre d'un motif Flyweight du livre GoF stocke uniquement du code de caractère dans des "Characters" partageables et utilise "GlyphContext" pour stocker l'état extrinsèque dans une arborescence. Cet exemple mentionne aussi Rows and Columns, mais ne mentionne pas comment stocker une "collection" de flyweights (objets "Character"). Il est clair que ce modèle permet d'éviter de créer un grand nombre d'objets en partageant des instances, mais comment créer une structure de tels objets (par exemple, représenter un document) sans créer de structure de références aux objets en cache (ce qui invaliderait le but du modèle)? Je vois que d'autres exemples utilisent des instances en cache comme des objets "jetables", sans construire de structure, mais cela ne semble pas avoir de sens, puisqu'il pourrait être remplacé par un ensemble d'opérations statiques. Est-il correct de conclure que si l'on doit se référer aux masselottes après leur création, le bénéfice du modèle peut être grossièrement calculé comme [taille de l'état intrinsèque]/[taille de l'objet référence]. Cela signifie que la mouche avec seulement 1 champ n'a pas de sens?Modèle poids mouche - comment stocker des poids volants dans la structure de données?

EDIT: J'avais tort dans mes "calculs de mémoire" ... Sans flyweights, vous avez besoin de stocker des références de toute façon, mais avec flyweights, vous n'avez plus besoin de stocker des objets. Le point de base de la question semble toujours valable: l'ampleur des économies fournies par le modèle est proportionnelle à la taille de l'état intrinsèque et non au nombre d'objets logiques. Vrai ou faux?

+0

Ai-je manqué le point? Un personnage au sens du GoF contiendrait plus d'informations que le seul caractère (unicode) - il pourrait contenir des informations sur la taille, les variantes, etc ... que vous ne voudriez pas dupliquer. –

+0

@David, cela aurait du sens. Cela confirmerait probablement aussi la justesse de ma conclusion (dernière phrase de la question)? – Konstantin

Répondre

0

Oui, même un objet de poids mouche a du sens si vous utilisez beaucoup cet objet. C'est plus rapide d'obtenir leurs instances, puis de faire de nouveaux objets.

Je trouve Map <string name, Object yourobject> (en Java) un bon moyen de les stocker. Pourquoi avez-vous besoin de "pas de structure"? L'utilisation d'une structure pour stocker le survol utilisé n'invalide pas l'objectif du motif. Vous avez besoin de quelques exemples de flywieghts pour les utiliser. Vous pouvez les faire pendant l'exécution et les ajouter à la liste (c'est comme cela que vous devez le faire, pour éviter les objets inutiles), ou vous pouvez les préparer avant l'exécution (ce qui a un sens "faible").