Poids-Mouche, Pourquoi utiliser ce patron de conception ?

Dans ce tutoriel, nous appendrons pourquoi utiliser le design pattern Poids-Mouche.

Nous le définirons puis l’analyserons au travers d’un exemple pratique.

Pré-requis : Avoir les bases en programmation orientée objet => Tutoriel OpenClassroom

upidev-poids-mouche-patron-de-conception

Définition :

Poids-mouche : Patron de conception qui permet de réduire le nombre d’objet à instancier si tous ces objets sont semblables et se différencient sur quelques paramètres

Exemple pratique :

On souhaite afficher un champignon à l’écran, pixel par pixel. Chaque pixel possède une couleur.
Deux choix s’offre à nous : Créer autant d’instance que de pixels ou créer seulement les pixels qui diffèrent ( blanc, rouge, noir ) et les réutiliser.

upidev-poids-mouche-champignon-exemple

Installation de dépendance

Dans ce tutoriel, nous utiliserons pygame pour afficher le champignon à l’écran et pympler pour obtenir la taille en mémoire utilisée pour stocker l’ensemble des objets Pixel.
Ouvrez une terminal et tapez les commandes suivantes

sudo apt-get install python-pygame
pip install pympler

Création d’autant d’instances que de pixels

Le code source affiché nous permet de créer une instance pour chaque pixel affiché.

Voir le code de test sans Poids-mouche.

Une fois le script exécuté dans un terminal, on obtient le résultat suivant.

# Résultats

44296 # Taille en octet de la liste de pixels
0:00:01.019054 # Temps d'execution du script

Création des instances qui diffèrent et réutilisation

Le code suivant crée seulement les instances de Pixel qui diffèrent. Une fois créés, elles peuvent être réutilisées.

Voir le code de test avec Poids-mouche.

Exécuter ce script dans un terminal, un résultat similaire sera obtenu.

# Résultats

1792 # Taille en octet de la liste de pixels
0:00:01.011397 # Temps d'execution du script
3 # Nombre d'instances différentes enregistrées

On s’aperçoit que le temps d’exécution et la mémoire utilisée sont réduits par rapport au 1er script.

Conclusion

Ainsi s’achève ce tutoriel, pour toutes questions eventuelles, ajoutez-les en commentaires.

0

Laisser un commentaire