Menu
CoddyTech

Pola Builder

Termasuk bagian Pemrograman Berorientasi Object dalam perjalanan C++ di Coddy. Pelajaran 93 dari 104.

Pola Builder memisahkan proses pembuatan object kompleks dari representasinya, sehingga kamu bisa membuat berbagai konfigurasi langkah demi langkah. Pola ini sangat berguna saat sebuah object memiliki banyak parameter opsional atau memerlukan urutan pembuatan tertentu.

Sebagai ganti constructor dengan banyak parameter yang membingungkan, Builder menyediakan method bernama yang jelas untuk setiap opsi konfigurasi:

#include <iostream>
#include <string>

class Pizza {
public:
    std::string dough;
    std::string sauce;
    std::string topping;
    bool cheese;
    
    void describe() const {
        std::cout << dough << " dough, " << sauce << " sauce, "
                  << topping << (cheese ? ", with cheese" : "") << "\n";
    }
};

class PizzaBuilder {
private:
    Pizza pizza;
    
public:
    PizzaBuilder& setDough(const std::string& d) {
        pizza.dough = d;
        return *this;
    }
    
    PizzaBuilder& setSauce(const std::string& s) {
        pizza.sauce = s;
        return *this;
    }
    
    PizzaBuilder& setTopping(const std::string& t) {
        pizza.topping = t;
        return *this;
    }
    
    PizzaBuilder& addCheese() {
        pizza.cheese = true;
        return *this;
    }
    
    Pizza build() { return pizza; }
};

int main() {
    Pizza margherita = PizzaBuilder()
        .setDough("thin")
        .setSauce("tomato")
        .setTopping("basil")
        .addCheese()
        .build();
    
    margherita.describe();
}

Setiap method setter mengembalikan referensi ke builder (return *this), sehingga kamu dapat merangkai method untuk membuat antarmuka yang lancar. Method build() menyelesaikan proses dan mengembalikan object yang telah dibuat.

Gunakan Builder saat membuat object dengan banyak komponen opsional, saat kamu ingin kode pembuatan yang mudah dibaca, atau saat proses pembuatan yang sama harus menghasilkan representasi yang berbeda.

challenge icon

Tantangan

Mudah

Mari buat sistem Computer Builder yang memungkinkan pengguna mengonfigurasi PC khusus langkah demi langkah. Ini adalah skenario yang tepat untuk pola Builder: komputer memiliki banyak komponen opsional, dan kita menginginkan cara yang rapi dan mudah dibaca untuk merakit berbagai konfigurasi.

Kamu akan mengatur kodemu dalam tiga file:

  • Computer.h: Definisikan class produk yang mewakili komputer dengan konfigurasi lengkap.

    Class Computer kamu harus menyimpan komponen berikut sebagai anggota private: cpu (string), ram (string), storage (string), gpu (string), dan hasWifi (boolean). Atur nilai awal hasWifi menjadi false dan string menjadi kosong secara default.

    Tambahkan method public bernama showSpecs() untuk menampilkan konfigurasi komputer. Untuk setiap komponen yang telah diatur (string yang tidak kosong), tampilkan pada baris tersendiri. Kemampuan wifi hanya boleh ditampilkan jika diaktifkan.

  • ComputerBuilder.h: Buat class builder yang menyusun komputer dengan antarmuka yang mendukung pemanggilan berantai.

    Class ComputerBuilder kamu harus memiliki anggota Computer private yang akan disusunnya. Implementasikan method berikut. Setiap method mengembalikan referensi ke builder agar method dapat dipanggil secara berantai:

    • setCPU(const std::string& cpu)
    • setRAM(const std::string& ram)
    • setStorage(const std::string& storage)
    • setGPU(const std::string& gpu)
    • addWifi(): mengaktifkan kemampuan wifi

    Implementasikan juga method build() yang mengembalikan object Computer yang telah selesai disusun dan mengatur ulang builder agar bisa digunakan kembali.

  • main.cpp: Satukan semuanya untuk menyusun komputer khusus.

    Baca empat input:

    1. Model CPU (string)
    2. Spesifikasi RAM (string)
    3. Spesifikasi penyimpanan (string)
    4. Apakah akan menyertakan wifi: yes atau no

    Gunakan ComputerBuilder untuk menyusun komputer dengan CPU, RAM, dan penyimpanan yang diberikan. Jika input wifi adalah yes, panggil juga addWifi(). Perhatikan bahwa konfigurasi ini tidak menentukan GPU: builder harus menangani komponen opsional dengan baik.

    Setelah selesai menyusun, panggil showSpecs() pada komputer yang dihasilkan untuk menampilkan konfigurasinya.

Method showSpecs() harus menghasilkan output dalam format berikut, hanya menampilkan komponen yang telah diatur:

CPU: [value]
RAM: [value]
Storage: [value]
GPU: [value]
Wifi: Enabled

Contohnya, dengan input Intel i7-12700K, 32GB DDR5, 1TB NVMe SSD, dan yes:

CPU: Intel i7-12700K
RAM: 32GB DDR5
Storage: 1TB NVMe SSD
Wifi: Enabled

Dengan input AMD Ryzen 5 5600X, 16GB DDR4, 512GB SSD, dan no:

CPU: AMD Ryzen 5 5600X
RAM: 16GB DDR4
Storage: 512GB SSD

Perhatikan bahwa pola Builder membuat proses penyusunan mudah dibaca dan fleksibel. Kamu dapat dengan mudah menambahkan atau melewatkan komponen, dan pemanggilan method secara berantai menghasilkan kode yang jelas serta mendokumentasikan dirinya sendiri. Baris GPU tidak muncul karena kita tidak pernah mengaturnya. Ini menunjukkan bagaimana builder menangani komponen opsional secara alami.

Coba sendiri

#include <iostream>
#include <string>
#include "ComputerBuilder.h"

using namespace std;

int main() {
    // Baca input
    string cpu, ram, storage, wifiChoice;
    getline(cin, cpu);
    getline(cin, ram);
    getline(cin, storage);
    getline(cin, wifiChoice);

    // TODO: Buat instance ComputerBuilder
    
    // TODO: Gunakan method chaining untuk mengatur CPU, RAM, dan storage
    
    // TODO: Jika wifiChoice bernilai "yes", panggil juga addWifi()
    
    // TODO: Panggil build() untuk mendapatkan object Computer
    
    // TODO: Panggil showSpecs() pada komputer yang sudah dibuat untuk menampilkan konfigurasi

    return 0;
}
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Pemrograman Berorientasi Object

Latihan sendiri: Compiler C++ online