Menu
Coddy logo textTech

Resumen: Logger Factory

Parte de la sección Programación Orientada a Objetos del Journey de C de Coddy. Lección 57 de 61.

challenge icon

Desafío

Fácil

Construyamos una fábrica de registros: un sistema que demuestra el poder de combinar el patrón Factory con el polimorfismo. Tu fábrica creará diferentes implementaciones de registro basándose en un indicador de configuración, lo que permitirá que el código cambie entre una salida detallada en la consola y un registro silencioso de tipo "dummy" sin cambiar la forma en que se utilizan los registradores.

Organizarás tu código en tres archivos:

  • logger.h: Define una estructura Logger que actúa como una interfaz. Debe contener un puntero a función para log que reciba un Logger* y un mensaje const char*. Declara tu función de fábrica create_logger, que recibe un indicador entero (1 para consola, 0 para dummy) y devuelve un Logger*. Declara también una función free_logger para la limpieza.
  • logger.c: Implementa dos tipos concretos de registradores. ConsoleLogger incorpora Logger como su primer miembro y tiene una función de registro que imprime los mensajes con el formato [LOG] message. DummyLogger también incorpora Logger, pero su función de registro no hace nada. Simplemente retorna sin imprimir. Crea funciones constructoras para cada tipo que asignen memoria y conecten la función de registro correspondiente. Después, implementa create_logger como una fábrica que compruebe el indicador y devuelva el tipo de registrador apropiado como un Logger*. Implementa free_logger para liberar la memoria.
  • main.c: Lee un entero (1 o 0) para determinar qué registrador crear. Usa tu fábrica para crear el registrador apropiado y, después, llama a su función log con dos mensajes: "Starting application" y "Shutting down". Finalmente, libera el registrador.

Tu programa recibirá una entrada: un entero que indica el tipo de registrador (1 para consola, 0 para dummy).

Salida de ejemplo cuando la entrada es 1:

[LOG] Starting application
[LOG] Shutting down

Salida de ejemplo cuando la entrada es 0:

(Sin salida: el registrador dummy ignora silenciosamente todos los mensajes)

La elegancia de este enfoque está en que main.c utiliza el registrador de forma idéntica, independientemente del tipo que reciba. La fábrica decide qué crear, y el polimorfismo garantiza que se ejecute el comportamiento correcto. Este patrón es invaluable en aplicaciones reales en las que quizá quieras un registro detallado durante el desarrollo, pero una operación silenciosa en producción.

Pruébalo tú mismo

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

int main() {
    // Lee el flag del tipo de logger (1 para console, 0 para dummy)
    int flag;
    scanf("%d", &flag);
    
    // TODO: Usa la factory para crear el logger apropiado
    
    // TODO: Call the logger's log function with "Starting application"
    
    // TODO: Call the logger's log function with "Shutting down"
    
    // TODO: Libera el logger
    
    return 0;
}

Todas las lecciones de Programación Orientada a Objetos

Practica por tu cuenta: Compilador de C online