Menu
CoddyTech

Pola Factory

Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Java di Coddy. Pelajaran 66 dari 87.

Factory Pattern adalah pola desain kreasi yang mendelegasikan pembuatan object ke method atau class terpisah. Alih-alih menggunakan new secara langsung dalam kodemu, kamu meminta factory untuk membuat object untukmu. Pola ini sangat berguna saat kamu memiliki beberapa class terkait yang menggunakan interface atau induk yang sama.

Bayangkan sistem notifikasi yang dapat mengirim email, SMS, atau notifikasi push. Tanpa factory, kodemu perlu mengetahui setiap class konkret:

// Tanpa Factory, client harus mengetahui semua class konkret
Notification notification;
if (type.equals("email")) {
    notification = new EmailNotification();
} else if (type.equals("sms")) {
    notification = new SMSNotification();
}

Dengan Factory Pattern, kamu memusatkan logika pembuatan ini:

public interface Notification {
    void send(String message);
}

public class EmailNotification implements Notification {
    public void send(String message) {
        System.out.println("Email: " + message);
    }
}

public class SMSNotification implements Notification {
    public void send(String message) {
        System.out.println("SMS: " + message);
    }
}

public class NotificationFactory {
    public static Notification create(String type) {
        if (type.equals("email")) {
            return new EmailNotification();
        } else if (type.equals("sms")) {
            return new SMSNotification();
        }
        return null;
    }
}

Sekarang kode client lebih rapi dan tidak bergantung pada class konkret:

Notification notification = NotificationFactory.create("email");
notification.send("Hello!");  // output: Email: Hello!

Manfaat utamanya adalah menambahkan jenis notifikasi baru hanya memerlukan pembaruan factory, kode client tetap tidak berubah. Ini mengikuti prinsip pemrograman ke antarmuka, sehingga sistemmu lebih fleksibel dan lebih mudah dikembangkan.

challenge icon

Tantangan

Mudah

Mari bangun sistem menggambar bentuk menggunakan Factory Pattern! Alih-alih membuat object bentuk secara langsung di seluruh kodemu, kamu akan memusatkan logika pembuatannya dalam sebuah factory yang menghasilkan berbagai jenis bentuk berdasarkan pengenal string sederhana.

Kamu akan mengatur kodemu dalam empat file:

  • Shape.java: Definisikan interface bernama Shape yang berfungsi sebagai kontrak umum untuk semua bentuk. Interface-mu harus mendeklarasikan satu method draw() yang tidak mengembalikan apa pun, tetapi mencetak informasi tentang bentuk yang sedang digambar.
  • Shapes.java: Buat tiga class yang mengimplementasikan interface Shape-mu:

    Circle - method draw()-nya harus mencetak Drawing a Circle

    Rectangle - method draw()-nya harus mencetak Drawing a Rectangle

    Triangle - method draw()-nya harus mencetak Drawing a Triangle

  • ShapeFactory.java: Buat class factory yang menangani pembuatan bentuk. ShapeFactory-mu harus memiliki method static createShape(String type) yang mengembalikan Shape. Berdasarkan parameter type:
    • Jika type sama dengan "circle", kembalikan Circle baru
    • Jika type sama dengan "rectangle", kembalikan Rectangle baru
    • Jika type sama dengan "triangle", kembalikan Triangle baru
    • Untuk nilai lainnya, kembalikan null
  • Main.java: Satukan sistem factory-mu! Kamu akan menerima dua input: dua jenis bentuk (keduanya berupa String).

    Untuk setiap input, gunakan ShapeFactory-mu untuk membuat bentuk dan menyimpannya dalam variabel Shape. Jika factory mengembalikan bentuk yang valid (bukan null), panggil method draw()-nya. Jika factory mengembalikan null, cetak Unknown shape: [type] dengan [type] sebagai input yang diberikan.

    Proses kedua input secara berurutan, masing-masing pada baris output tersendiri.

Kamu akan menerima dua input secara berurutan: jenis bentuk pertama (String) dan jenis bentuk kedua (String).

Perhatikan bahwa class Main-mu tidak pernah menggunakan new Circle() atau new Rectangle() secara langsung. Class ini hanya mengetahui interface Shape dan meminta factory untuk membuat object. Inilah kekuatan Factory Pattern: kode client tidak terikat pada class konkret!

Coba sendiri

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // Baca dua jenis bentuk
        String type1 = scanner.nextLine();
        String type2 = scanner.nextLine();
        
        // TODO: Gunakan ShapeFactory untuk membuat bentuk pertama
        // Jika bentuknya tidak null, panggil draw()
        // Jika bentuknya null, cetak "Unknown shape: [type]"
        
        // TODO: Lakukan hal yang sama untuk bentuk kedua
        
    }
}
quiz iconUji dirimu

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

Semua pelajaran di Pemrograman Berorientasi Objek

Latihan sendiri: Compiler Java online