Menu
Coddy logo textTech

Récapitulatif : Logger Factory

Fait partie de la section Object Oriented Programming du Journey C de Coddy — leçon 57 sur 61.

challenge icon

Défi

Facile

Construisons une Logger Factory — un système qui démontre la puissance de la combinaison du pattern Factory avec le polymorphisme. Votre factory créera différentes implémentations de logger basées sur un drapeau de configuration, permettant au code de basculer entre une sortie console verbeuse et une journalisation "dummy" silencieuse sans changer la façon dont les loggers sont utilisés.

Vous organiserez votre code sur trois fichiers :

  • logger.h : Définissez une structure Logger qui agit comme une interface — elle doit contenir un pointeur de fonction pour log qui prend un Logger* et un message const char*. Déclarez votre fonction factory create_logger qui prend un drapeau entier (1 pour la console, 0 pour le dummy) et retourne un Logger*. Déclarez également une fonction free_logger pour le nettoyage.
  • logger.c : Implémentez deux types de logger concrets. Le ConsoleLogger imbrique Logger comme premier membre et possède une fonction de log qui affiche les messages au format [LOG] message. Le DummyLogger imbrique également Logger mais sa fonction de log ne fait rien — elle se contente de retourner sans rien afficher. Créez des fonctions constructeurs pour chaque type qui allouent de la mémoire et lient la fonction de log appropriée. Ensuite, implémentez create_logger comme une factory qui vérifie le drapeau et retourne le type de logger approprié sous forme de Logger*. Implémentez free_logger pour libérer la mémoire.
  • main.c : Lisez un entier (1 ou 0) pour déterminer quel logger créer. Utilisez votre factory pour créer le logger approprié, puis appelez sa fonction log avec deux messages : "Starting application" et "Shutting down". Enfin, libérez le logger.

Votre programme recevra une entrée : un entier indiquant le type de logger (1 pour la console, 0 pour le dummy).

Exemple de sortie lorsque l'entrée est 1 :

[LOG] Starting application
[LOG] Shutting down

Exemple de sortie lorsque l'entrée est 0 :

(Aucune sortie — le logger dummy ignore silencieusement tous les messages)

L'élégance ici est que main.c utilise le logger de manière identique quel que soit le type qu'il reçoit. La factory décide quoi créer, et le polymorphisme garantit l'exécution du comportement correct. Ce pattern est inestimable dans les applications réelles où vous pourriez vouloir une journalisation verbeuse pendant le développement mais un fonctionnement silencieux en production.

Essayez vous-même

#include <stdio.h>
#include "logger.h"

int main() {
    // Lire le flag du type de logger (1 pour console, 0 pour dummy)
    int flag;
    scanf("%d", &flag);
    
    // TODO: Utiliser la factory pour créer le logger approprié
    
    // TODO: Appeler la fonction log du logger avec "Starting application"
    
    // TODO: Appeler la fonction log du logger avec "Shutting down"
    
    // TODO: Libérer le logger
    
    return 0;
}

Toutes les leçons de Object Oriented Programming