Menu
CoddyTech

Rangkuman: Factory Logger

Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan C di Coddy. Pelajaran 57 dari 61.

challenge icon

Tantangan

Mudah

Mari 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 struct Logger yang berperan sebagai antarmuka. Struct ini harus berisi pointer fungsi untuk log yang menerima Logger* dan pesan const char*. Deklarasikan fungsi factory create_logger yang menerima tanda bilangan bulat (1 untuk konsol, 0 untuk dummy) dan mengembalikan Logger*. Deklarasikan juga fungsi free_logger untuk pembersihan.
  • logger.c: Implementasikan dua tipe logger konkret. ConsoleLogger menyertakan Logger sebagai anggota pertamanya dan memiliki fungsi log yang mencetak pesan dalam format [LOG] message. DummyLogger juga menyertakan Logger, 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, implementasikan create_logger sebagai factory yang memeriksa tanda dan mengembalikan tipe logger yang sesuai sebagai Logger*. Implementasikan free_logger untuk 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 fungsi log-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 down

Contoh 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

Latihan sendiri: Compiler C online