Rangkuman: Factory Logger
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan C di Coddy. Pelajaran 57 dari 61.
Tantangan
MudahMari kita buat Logger Factory: sistem yang menunjukkan kekuatan menggabungkan pola Factory dengan polimorfisme. Factory-mu akan membuat implementasi logger yang berbeda berdasarkan tanda konfigurasi, sehingga kode dapat beralih antara output konsol yang terperinci dan pencatatan "dummy" yang senyap tanpa mengubah cara logger digunakan.
Kamu akan mengatur kodemu dalam tiga file:
logger.h: Definisikan structLoggeryang berperan sebagai antarmuka. Struct ini harus berisi pointer fungsi untuklogyang menerimaLogger*dan pesanconst char*. Deklarasikan fungsi factorycreate_loggeryang menerima tanda bilangan bulat (1 untuk konsol, 0 untuk dummy) dan mengembalikanLogger*. Deklarasikan juga fungsifree_loggeruntuk pembersihan.logger.c: Implementasikan dua tipe logger konkret.ConsoleLoggermenyertakanLoggersebagai anggota pertamanya dan memiliki fungsi log yang mencetak pesan dalam format[LOG] message.DummyLoggerjuga menyertakanLogger, tetapi fungsi log-nya tidak melakukan apa pun. Fungsi tersebut langsung kembali tanpa mencetak. Buat fungsi konstruktor untuk setiap tipe yang mengalokasikan memori dan menghubungkan fungsi log yang sesuai. Lalu, implementasikancreate_loggersebagai factory yang memeriksa tanda dan mengembalikan tipe logger yang sesuai sebagaiLogger*. Implementasikanfree_loggeruntuk membebaskan memori.main.c: Baca bilangan bulat (1 atau 0) untuk menentukan logger yang akan dibuat. Gunakan factory-mu untuk membuat logger yang sesuai, lalu panggil fungsilog-nya dengan dua pesan:"Starting application"dan"Shutting down". Terakhir, bebaskan logger tersebut.
Programmu akan menerima satu input: bilangan bulat yang menunjukkan tipe logger (1 untuk konsol, 0 untuk dummy).
Contoh output saat inputnya 1:
[LOG] Starting application
[LOG] Shutting downContoh output saat inputnya 0:
(Tidak ada output: logger dummy mengabaikan semua pesan secara senyap)
Keunggulannya adalah main.c menggunakan logger dengan cara yang sama, apa pun tipe yang diterimanya. Factory menentukan apa yang dibuat, dan polimorfisme memastikan perilaku yang benar dijalankan. Pola ini sangat berguna dalam aplikasi nyata, saat kamu mungkin menginginkan pencatatan terperinci selama pengembangan, tetapi operasi senyap di lingkungan produksi.
Coba sendiri
#include <stdio.h>
#include "logger.h"
int main() {
// Baca penanda tipe logger (1 untuk console, 0 untuk dummy)
int flag;
scanf("%d", &flag);
// TODO: Gunakan factory untuk membuat logger yang sesuai
// TODO: Panggil fungsi log milik logger dengan "Starting application"
// TODO: Panggil fungsi log milik logger dengan "Shutting down"
// TODO: Bebaskan memori logger
return 0;
}
Semua pelajaran di Pemrograman Berorientasi Objek
1Dasar-Dasar Pemrograman Modular
file headerProteksi includefile sumberFungsi StatisRingkasan: Kalkulator Modular4Enkapsulasi
Konsep Opaque PointerMendefinisikan Opaque StructGetter dan SetterValidasi pada SetterUlasan: Kotak Rahasia2Object dan method
Struct sebagai objectPointer 'self'Konsistensi constPointer vs nilaiMethod pembantuRangkuman: Pengelola Point5Proyek: Akun Bank Sederhana
Penyiapan ProyekImplementasi Akun3Siklus Hidup object
Pola KonstruktorPola DestruktorInisialisasi StackSalinan MendalamRangkuman: Pembungkus string6Pewarisan melalui Komposisi
Penyematan StructAturan Anggota PertamaMengakses Anggota ParentUpcastingRekap: Hierarki Bentuk9Proyek: Penggambar Bentuk
Ringkasan ProyekImplementasi LingkaranImplementasi Persegi PanjangPenggunaan PolimorfismeWadah BentukLatihan sendiri: Compiler C online