Le poids mouche est un patron de conception structurel qui permet à des programmes de limiter leur consommation de mémoire malgré un très grand nombre d’objets.
Ce patron est obtenu en partageant des parties de l’état d’un objet à plusieurs autres objets. En d’autres termes, le poids mouche économise de la RAM en mettant en cache les données identiques chez différents objets.
Exemples d’utilisation : Le poids mouche est très rare dans les applications PHP à cause de la nature du langage. Un script PHP fonctionne en général avec une partie des données de l’application et ne charge jamais tout dans la mémoire en même temps.
Identification : Le poids mouche peut être reconnu par une méthode de création qui renvoie des objets du cache plutôt que d’en créer de nouveaux.
Exemple conceptuel
Dans cet exemple, nous allons voir la structure du Poids mouche et répondre aux questions suivantes :
Que contiennent les classes ?
Quels rôles jouent-elles ?
Comment les éléments du patron sont-ils reliés ?
Après avoir étudié la structure du patron, vous pourrez plus facilement comprendre l’exemple suivant qui est basé sur un cas d’utilisation réel en PHP.
index.php: Exemple conceptuel
Output.txt: Résultat de l’exécution
Analogie du monde réel
Avant de commencer, sachez que les cas d’utilisation du Poids mouche en PHP sont très rares. Le PHP est monothread, vous n’êtes donc pas censés stocker TOUS les objets de l’application en mémoire en même temps dans le même thread. L’exemple qui suit n’est qu’à moitié sérieux et le problème de RAM pourrait être résolu en structurant l’application différemment. Il permet tout de même de représenter le concept du patron dans le monde réel. Maintenant que vous avez été prévenus, nous pouvons commencer.
Dans cet exemple, le poids mouche est utilisé pour minimiser la RAM consommée par les objets d’une base de données d’un vétérinaire qui ne s’occupe que de chats. Chaque enregistrement de la base de données est représenté par un objet Chat. Ses données sont structurées en deux parties :
Les données uniques (extrinsèques) comme le nom de l’animal, son âge et des informations concernant son propriétaire.
Les données partagées (intrinsèques) comme le nom de sa race, sa couleur, sa texture, etc.
La première partie est stockée directement dans la classe Chat, qui prend le rôle du contexte. La seconde partie est stockée séparément et peut être partagée par plusieurs chats. Ces données partageables sont stockées dans la classe VariationChat. Tous les chats ont des caractéristiques similaires qui sont référencées dans la même classe VariationChat, plutôt qu’être stockées dans leurs objets respectifs.