Özet: Logger Factory
Coddy'nin C Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 57 / 61.
Görev
KolayBir 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 birLoggeryapısı tanımlayın. Bu yapı, birlogve birLogger*mesaj alan birconst char*işlev işaretçisi içermelidir. Bir tamsayı bayrağı (konsol için 1, dummy için 0) alan ve bircreate_loggerdöndüren fabrika işlevinizLogger*için bildirim ekleyin. Ayrıca temizlik için birfree_loggerişlevi bildirin.logger.c: İki somut günlükleyici türü uygulayın.ConsoleLogger, ilk üyesi olarakLoggeryapısını içerir ve mesajları[LOG] messagebiçiminde yazdıran bir log işlevine sahiptir.DummyLoggerdaLoggeryapı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_loggerolarak döndüren bir fabrika şeklindeLogger*işlevini uygulayın. Belleği serbest bırakmak içinfree_loggeriş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 onunlogiş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 downGirdi 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
1Modüler Programlama Temelleri
Başlık DosyalarıInclude Guard'larKaynak DosyalarıStatik FonksiyonlarÖzet: Modüler Hesap Makinesi4Kapsülleme
Opaque Pointer KavramıOpaque Struct TanımlamaGetter ve Setter MetotlarıSetter Metotlarında DoğrulamaÖzet: Gizli Kutu2Nesneler ve Metotlar
Nesne Olarak Struct'lar'Self' İşaretçisiConst Doğruluğuİşaretçi vs DeğerYardımcı MetotlarÖzet: Point Manager5Proje: Basit Banka Hesabı
Proje KurulumuHesabın Oluşturulması3Nesne Yaşam Döngüsü
Constructor DeseniDestructor DeseniStack İlklendirmeDerin KopyalamaÖzet: String Wrapper6Kompozisyon Yoluyla Kalıtım
Struct Gömmeİlk Üye KuralıÜst Üyelere ErişimUpcastingÖzet: Şekil HiyerarşisiKendi başına pratik yap: Online C derleyicisi