Özet: Logger Factory
Coddy'nin C Journey'sinin Object Oriented Programming bölümünün bir parçası — ders 57 / 61.
Görev
KolayFabrika (Factory) desenini polimorfizm ile birleştirmenin gücünü gösteren bir sistem olan Logger Factory (Günlükçü Fabrikası) inşa edelim. Fabrikanız, bir yapılandırma bayrağına dayalı olarak farklı günlükçü (logger) uygulamaları oluşturacak ve kodun, günlükçülerin nasıl kullanıldığını değiştirmeden ayrıntılı konsol çıktısı ile sessiz "dummy" (sahte) günlükleme arasında geçiş yapmasına olanak tanıyacaktır.
Kodunuzu üç dosya halinde düzenleyeceksiniz:
logger.h: Bir arayüz görevi gören birLoggeryapısı (struct) tanımlayın — bu yapı, birLogger*ve birconst char*mesajı alanlogiçin bir fonksiyon göstericisi (function pointer) içermelidir. Bir tam sayı bayrağı (konsol için 1, dummy için 0) alan ve birLogger*döndürencreate_loggerfabrika fonksiyonunuzu bildirin. Ayrıca temizlik için birfree_loggerfonksiyonu bildirin.logger.c: İki somut günlükçü türü uygulayın.ConsoleLogger,Loggeryapısını ilk üyesi olarak gömer ve mesajları[LOG] messageformatında yazdıran bir günlükleme fonksiyonuna sahiptir.DummyLoggerdaLoggeryapısını gömer ancak günlükleme fonksiyonu hiçbir şey yapmaz — yazdırmadan doğrudan geri döner. Her tür için bellek ayıran ve uygun günlükleme fonksiyonunu bağlayan yapıcı (constructor) fonksiyonlar oluşturun. Ardından, bayrağı kontrol eden ve uygun günlükçü türünü birLogger*olarak döndüren bir fabrika olarakcreate_loggerfonksiyonunu uygulayın. Belleği serbest bırakmak içinfree_loggerfonksiyonunu uygulayın.main.c: Hangi günlükçünün oluşturulacağını belirlemek için bir tam sayı (1 veya 0) okuyun. Uygun günlükçüyü oluşturmak için fabrikanızı kullanın, ardından iki mesajla günlükçününlogfonksiyonunu çağırın:"Starting application"ve"Shutting down". Son olarak, günlükçüyü serbest bırakın.
Programınız bir girdi alacaktır: günlükçü türünü belirten bir tam sayı (konsol için 1, dummy için 0).
Girdi 1 olduğunda örnek çıktı:
[LOG] Starting application
[LOG] Shutting downGirdi 0 olduğunda örnek çıktı:
(Çıktı yok — dummy günlükçü tüm mesajları sessizce görmezden gelir)
Buradaki zarafet, main.c dosyasının hangi türü aldığına bakılmaksızın günlükçüyü aynı şekilde kullanmasıdır. Fabrika neyin 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ükleme, ancak üretimde sessiz çalışma isteyebileceğiniz gerçek uygulamalarda paha biçilemezdir.
Kendin dene
#include <stdio.h>
#include "logger.h"
int main() {
// Logger türü bayrağını oku (konsol için 1, dummy için 0)
int flag;
scanf("%d", &flag);
// TODO: Uygun logger'ı oluşturmak için factory'yi kullanın
// TODO: "Starting application" ile logger'ın log fonksiyonunu çağırın
// TODO: "Shutting down" ile logger'ın log fonksiyonunu çağırın
// TODO: logger'ı serbest bırakın
return 0;
}
Object Oriented Programming 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şisi