Corak Strategy: Algoritma Boleh Tukar Ganti
Rangkumkan algoritma pengisihan atau pembayaran di sebalik antara muka Strategy untuk pertukaran semasa masa jalan.
Corak Strategy: Algoritma Boleh Tukar Ganti ialah pelajaran Java Academy percuma di CoddyKit. Ini ialah pelajaran 2 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Java Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Java Academy merangkumi sejumlah 4 pelajaran.
Niat Strategi
Strategi mentakrifkan keluarga algoritma, merangkum setiap satunya dan menjadikannya boleh ditukar ganti. Strategi membolehkan algoritma berubah secara berasingan daripada konteks yang menggunakannya.
Masalah Tanpa Strategi
Tanpa Strategi, pemilihan algoritma tersembunyi dalam rantaian if-else. Penambahan algoritma baharu bermaksud kelas konteks perlu disunting — 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
}Antara Muka Strategi
Takrifkan @FunctionalInterface atau antara muka biasa yang mewakili kontrak algoritma. Setiap pelaksanaan merangkum algoritma yang berbeza.
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 rujukan kepada strategi dan menyerahkan pelaksanaan algoritma kepadanya. Strategi boleh ditukar pada masa jalan.
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); }
}Menukar Strategi pada Masa Jalan
Tukar strategi serta-merta tanpa mengubah konteks. Dengan ini, tingkah laku boleh dikonfigurasikan 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 sortStrategi Lambda
Apabila antara muka strategi ialah @FunctionalInterface, gunakan lambda secara terus — tiada keperluan untuk kelas eksplisit bagi strategi yang mudah.
Sorter sorter = new Sorter(data -> Collections.sort(data)); // lambda strategy
// or method reference:
Sorter sorter2 = new Sorter(Collections::sort);Strategi untuk Pemprosesan Pembayaran
Penggunaan dunia sebenar yang klasik: konteks pembayaran menerima strategi pembayaran yang berbeza (kad kredit, PayPal, mata wang kripto) tanpa mengetahui butiran setiap strategi.
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 Pemampatan
Pemproses fail boleh menggunakan CompressionStrategy. Pasangkan GZIP, ZIP atau LZ4 tanpa mengubah aliran pemprosesan fail.
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 Kilang
Gunakan kilang untuk memilih strategi berdasarkan konfigurasi, sambil mengekalkan logik pemilihan berasingan daripada konteks dan 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 berbanding Kaedah Templat
Kaedah Templat menggunakan pewarisan: rangka asas berada dalam kelas asas, manakala subkelas menggantikan langkah-langkahnya. Strategi menggunakan penggubahan: algoritma berada sepenuhnya di luar. Utamakan Strategi untuk fleksibiliti yang lebih tinggi.
Strategi dalam JDK
Comparator ialah Strategi JDK yang lazim. Luluskan pembanding yang berbeza kepada Collections.sort untuk menukar algoritma pengisihan tanpa menyentuh kod 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 berasingan — hanya panggil strategy.sort(data) dalam ujian unit. Suntik strategi olok-olok ke dalam konteks untuk menguji logik penyelarasan konteks.
Semakan Pantas
Apakah perbezaan struktur utama antara Strategi dengan Kaedah Templat?
Rumusan
Strategi merangkum algoritma yang boleh ditukar ganti di sebalik antara muka umum. Gunakan lambda untuk strategi mudah dan kelas untuk strategi kompleks. Gabungkan dengan kilang untuk pemilihan dipacu konfigurasi.
Pelajari Java dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 104
- Pelajaran
- 374
Soalan Lazim
Adakah pelajaran “Corak Strategy: Algoritma Boleh Tukar Ganti” percuma?
Ya — teks penuh “Corak Strategy: Algoritma Boleh Tukar Ganti” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus Java Academy, tingkat taraf kepada CoddyKit PRO. Kursus Java Academy merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “Corak Strategy: Algoritma Boleh Tukar Ganti”?
Rangkumkan algoritma pengisihan atau pembayaran di sebalik antara muka Strategy untuk pertukaran semasa masa jalan. Anda berlatih Java Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan Java Academy?
Tiada pengalaman terdahulu diperlukan. Pembelajaran Java Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 2 daripada 4.
Berapa lamakah pelajaran “Corak Strategy: Algoritma Boleh Tukar Ganti” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran Java Academy ini?
Ya. Setiap pelajaran Java Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- Corak Observer: Pemberitahuan Acara
- Corak Strategy: Algoritma Boleh Tukar Ganti
- Corak Command: Merangkum Tindakan
- Template Method: Mentakrifkan Rangka Algoritma