Menu
Coddy logo textTech

Özet: Logger Factory

Coddy'nin C Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 57 / 61.

challenge icon

Görev

Kolay

Bir Logger Factory oluşturalım: Factory desenini polimorfizmle birleştirmenin gücünü gösteren bir sistem. Fabrikanız, bir yapılandırma bayrağına göre farklı günlükleyici uygulamaları oluşturacak ve günlükleyicilerin nasıl kullanıldığını değiştirmeden kodun ayrıntılı konsol çıktısı ile sessiz “dummy” günlük kaydı arasında geçiş yapmasına olanak tanıyacak.

Kodunuzu üç dosyaya ayıracaksınız:

  • logger.h: Arayüz görevi gören bir Logger yapısı tanımlayın. Bu yapı, bir log ve bir Logger* mesaj alan bir const char* işlev işaretçisi içermelidir. Bir tamsayı bayrağı (konsol için 1, dummy için 0) alan ve bir create_logger döndüren fabrika işleviniz Logger* için bildirim ekleyin. Ayrıca temizlik için bir free_logger işlevi bildirin.
  • logger.c: İki somut günlükleyici türü uygulayın. ConsoleLogger, ilk üyesi olarak Logger yapısını içerir ve mesajları [LOG] message biçiminde yazdıran bir log işlevine sahiptir. DummyLogger da Logger yapısını içerir, ancak log işlevi hiçbir şey yapmaz. Yazdırma gerçekleştirmeden doğrudan geri döner. Her tür için bellek ayıran ve uygun log işlevini bağlayan kurucu işlevler oluşturun. Ardından, bayrağı kontrol eden ve uygun günlükleyici türünü create_logger olarak döndüren bir fabrika şeklinde Logger* işlevini uygulayın. Belleği serbest bırakmak için free_logger işlevini uygulayın.
  • main.c: Hangi günlükleyicinin oluşturulacağını belirlemek için bir tamsayı (1 veya 0) okuyun. Uygun günlükleyiciyi oluşturmak için fabrikanızı kullanın, ardından onun log işlevini iki mesajla çağırın: "Starting application" ve "Shutting down". Son olarak günlükleyiciyi serbest bırakın.

Programınız bir girdi alacak: günlükleyici türünü belirten bir tamsayı (konsol için 1, dummy için 0).

Girdi 1 olduğundaki örnek çıktı:

[LOG] Starting application
[LOG] Shutting down

Girdi 0 olduğundaki örnek çıktı:

(Çıktı yok: dummy günlükleyici tüm mesajları sessizce yok sayar)

Buradaki zarafet, main.c dosyasının aldığı türden bağımsız olarak günlükleyiciyi aynı şekilde kullanmasıdır. Fabrika ne oluşturulacağına karar verir ve polimorfizm doğru davranışın yürütülmesini sağlar. Bu desen, geliştirme sırasında ayrıntılı günlük kaydı, üretimde ise sessiz çalışma isteyebileceğiniz gerçek uygulamalarda son derece değerlidir.

Kendin dene

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

int main() {
    // Logger türü bayrağını oku (1 konsol için, 0 dummy için)
    int flag;
    scanf("%d", &flag);
    
    // TODO: Uygun logger'ı oluşturmak için factory'yi kullan
    
    // TODO: Call the logger's log function with "Starting application"
    
    // TODO: Call the logger's log function with "Shutting down"
    
    // TODO: Logger'ı serbest bırak
    
    return 0;
}

Nesne Yönelimli Programlama bölümündeki tüm dersler

Kendi başına pratik yap: Online C derleyicisi