0Pricing
Java Academy · Pelajaran

Pola Strategy: Algoritma yang Dapat Dipertukarkan

Bungkus algoritma pengurutan atau pembayaran di balik interface Strategy agar dapat diganti saat program berjalan.

Pola Strategy: Algoritma yang Dapat Dipertukarkan adalah pelajaran Java Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Java Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Java Academy mencakup 4 pelajaran total.

Tujuan Strategi

Strategi mendefinisikan keluarga algoritme, mengenkapsulasi setiap algoritme, dan membuatnya dapat dipertukarkan. Strategi memungkinkan algoritme bervariasi secara independen dari konteks yang menggunakannya.

Masalah Tanpa Strategi

Tanpa Strategi, pemilihan algoritme tersembunyi dalam rangkaian if-else. Menambahkan algoritme baru berarti mengubah kelas konteks — melanggar Prinsip Terbuka/Tertutup.

public double sort(List<Integer> data, String method) {
    if (method.equals("bubble")) { /* bubble sort */ }
    else if (method.equals("merge")) { /* merge sort */ }
    // adding quicksort requires editing this class
}

Antarmuka Strategi

Definisikan @FunctionalInterface atau antarmuka biasa yang merepresentasikan kontrak algoritme. Setiap implementasi mengenkapsulasi algoritme yang berbeda.

public interface SortStrategy {
    void sort(List<Integer> data);
}
public class BubbleSortStrategy implements SortStrategy {
    public void sort(List<Integer> data) { /* bubble sort logic */ }
}
public class QuickSortStrategy implements SortStrategy {
    public void sort(List<Integer> data) { Collections.sort(data); }
}

Kelas Konteks

Konteks menyimpan referensi ke strategi dan mendelegasikan eksekusi algoritme kepadanya. Strategi dapat diganti saat aplikasi berjalan.

public class Sorter {
    private SortStrategy strategy;
    public Sorter(SortStrategy strategy) { this.strategy = strategy; }
    public void setStrategy(SortStrategy s) { this.strategy = s; }
    public void sort(List<Integer> data)   { strategy.sort(data); }
}

Mengganti Strategi Saat Berjalan

Ubah strategi secara langsung tanpa memodifikasi konteks. Hal ini membuat perilaku dapat dikonfigurasi dari luar kelas.

Sorter sorter = new Sorter(new BubbleSortStrategy());
sorter.sort(data);                          // uses bubble sort
sorter.setStrategy(new QuickSortStrategy());
sorter.sort(data);                          // now uses quick sort

Strategi Lambda

Ketika antarmuka strategi berupa @FunctionalInterface, gunakan lambda secara langsung — tidak perlu membuat kelas eksplisit untuk strategi sederhana.

Sorter sorter = new Sorter(data -> Collections.sort(data)); // lambda strategy
// or method reference:
Sorter sorter2 = new Sorter(Collections::sort);

Strategi untuk Pemrosesan Pembayaran

Penggunaan klasik di dunia nyata: konteks pembayaran menerima berbagai strategi pembayaran, seperti kartu kredit, PayPal, atau kripto, tanpa mengetahui detail masing-masing.

public interface PaymentStrategy {
    void pay(double amount);
}
new PaymentProcessor(new CreditCardStrategy("4111...")).pay(99.99);
new PaymentProcessor(new PayPalStrategy("user@email.com")).pay(99.99);

Strategi untuk Kompresi

Pemroses berkas dapat menggunakan CompressionStrategy. Pasangkan GZIP, ZIP, atau LZ4 tanpa mengubah alur pemrosesan berkas.

public interface CompressionStrategy {
    byte[] compress(byte[] data) throws IOException;
}
public class GzipStrategy implements CompressionStrategy {
    public byte[] compress(byte[] data) throws IOException { /* gzip */ return new byte[0]; }
}

Menggabungkan Strategi dengan Pabrik

Gunakan pabrik untuk memilih strategi berdasarkan konfigurasi, sehingga logika pemilihan tetap terpisah dari konteks maupun strategi itu sendiri.

SortStrategy strategy = switch (config.getSortMethod()) {
    case "bubble" -> new BubbleSortStrategy();
    case "merge"  -> new MergeSortStrategy();
    default       -> Collections::sort;
};
new Sorter(strategy).sort(data);

Strategi vs Metode Templat

Metode Templat menggunakan pewarisan: kerangka kerja berada di kelas dasar; subkelas menimpa langkah-langkahnya. Strategi menggunakan komposisi: algoritme sepenuhnya berada di luar. Pilih Strategi untuk fleksibilitas yang lebih besar.

Strategi di JDK

Comparator adalah Strategi JDK yang menjadi rujukan. Berikan pembanding yang berbeda ke Collections.sort untuk mengubah algoritme pengurutan tanpa menyentuh kode koleksi.

List<String> names = List.of("Bob", "Alice", "Charlie");
names.stream().sorted(Comparator.comparingInt(String::length)).forEach(System.out::println);

Menguji Strategi

Strategi mudah diuji secara terisolasi—cukup panggil strategy.sort(data) dalam pengujian unit. Masukkan strategi tiruan ke konteks untuk menguji logika orkestrasi konteks.

Pemeriksaan Singkat

Apa perbedaan struktural utama antara Strategi dan Metode Templat?

Ringkasan

Strategi membungkus algoritme yang dapat dipertukarkan di balik antarmuka umum. Gunakan lambda untuk strategi sederhana dan kelas untuk strategi yang kompleks. Gabungkan dengan pabrik untuk pemilihan berdasarkan konfigurasi.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Pola Strategy: Algoritma yang Dapat Dipertukarkan” gratis?

Ya — teks lengkap “Pola Strategy: Algoritma yang Dapat Dipertukarkan” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Java Academy, upgrade ke CoddyKit PRO. Kursus Java Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Pola Strategy: Algoritma yang Dapat Dipertukarkan”?

Bungkus algoritma pengurutan atau pembayaran di balik interface Strategy agar dapat diganti saat program berjalan. Kamu berlatih Java Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Java Academy?

Tidak diperlukan pengalaman sebelumnya. Java Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.

Berapa lama pelajaran “Pola Strategy: Algoritma yang Dapat Dipertukarkan” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Java Academy ini?

Ya. Setiap pelajaran Java Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Pola Observer: Notifikasi Acara
  2. Pola Strategy: Algoritma yang Dapat Dipertukarkan
  3. Pola Command: Merangkum Tindakan
  4. Template Method: Mendefinisikan Kerangka Algoritma
← Kembali ke Java Academy