Corak Kaedah Kilang
Takrifkan kaedah kilang dalam kelas asas dan biarkan subkelas menentukan produk yang hendak dicipta.
Corak Kaedah Kilang 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 Kaedah Kilang
Kaedah Kilang mentakrifkan antara muka untuk mencipta objek, tetapi membenarkan subkelas menentukan kelas yang hendak diwujudkan. Kaedah ini mengasingkan logik penciptaan daripada kod klien.
Masalah Tanpa Kaedah Kilang
Tanpa kilang, kod klien dipenuhi dengan panggilan new ConcreteClass(). Penambahan varian baharu bermaksud setiap tempat panggilan perlu diubah — suatu pelanggaran Prinsip Terbuka/Tertutup.
// Client knows too much:
Shape shape;
if (type.equals("circle")) shape = new Circle(r);
else if (type.equals("rect")) shape = new Rectangle(w, h);
// Every new shape requires editing this code.Kelas Pencipta abstract
Takrifkan kelas pencipta abstract dengan kaedah kilang createProduct(). Subkelas menggantikannya untuk mengembalikan jenis produk tertentu.
public abstract class Dialog {
public void render() {
Button btn = createButton(); // factory method
btn.onClick();
}
protected abstract Button createButton();
}Pencipta Konkret
Setiap subkelas menggantikan kaedah kilang untuk mengembalikan produk yang sesuai tanpa mengubah algoritma sekeliling dalam kelas asas.
public class WindowsDialog extends Dialog {
@Override
protected Button createButton() { return new WindowsButton(); }
}
public class WebDialog extends Dialog {
@Override
protected Button createButton() { return new HtmlButton(); }
}Antara Muka Produk
Semua produk konkret melaksanakan antara muka yang sama supaya pencipta boleh mengendalikannya secara umum.
public interface Button {
void onClick();
void render();
}
public class WindowsButton implements Button {
public void onClick() { System.out.println("Windows click"); }
public void render() { System.out.println("Render Windows button"); }
}Kaedah Kilang Statik berbanding Corak Kaedah Kilang
Kaedah kilang statik (contohnya, LocalDate.of()) ialah konvensyen penamaan, bukannya corak GoF. Corak GoF menggunakan pewarisan; kilang statik pula menggunakan kaedah statik pada satu kelas.
// Static factory (NOT the GoF pattern)
LocalDate d = LocalDate.of(2024, 6, 15);
// GoF Factory Method uses a class hierarchyKaedah Kilang Berparameter
Luluskan parameter kepada kaedah kilang untuk memilih antara beberapa produk tanpa memerlukan satu subkelas bagi setiap produk.
public class ShapeFactory {
public static Shape create(String type, double... dims) {
return switch (type) {
case "circle" -> new Circle(dims[0]);
case "rectangle" -> new Rectangle(dims[0], dims[1]);
default -> throw new IllegalArgumentException("Unknown: " + type);
};
}
}Kaedah Kilang dengan Generik
Gunakan generik untuk menjadikan kaedah kilang selamat dari segi jenis dan boleh digunakan semula merentas keluarga produk yang berbeza.
public abstract class Repository<T, ID> {
public abstract T findById(ID id);
protected abstract T createEmpty(); // factory method
}Mendaftarkan Kilang dengan Peta
Kilang berasaskan daftar menyimpan pemetaan rentetan jenis kepada lambda Supplier, sekali gus mengelakkan rantaian if-else dan menjadikan pendaftaran dinamik.
Map<String, Supplier<Notification>> registry = new HashMap<>();
registry.put("email", EmailNotification::new);
registry.put("sms", SmsNotification::new);
Notification n = registry.getOrDefault(type, DefaultNotification::new).get();Kaedah Kilang berbanding Kilang Abstrak
Kaedah Kilang mencipta satu jenis produk melalui pewarisan. Kilang Abstrak mencipta keluarga produk yang berkaitan melalui penggubahan. Gunakan Kaedah Kilang apabila satu produk berubah; gunakan Kilang Abstrak apabila seluruh rangkaian berubah bersama-sama.
Contoh Dunia Sebenar: Kilang Logger
LoggerFactory.getLogger(Class) milik SLF4J ialah kilang statik yang mengembalikan pelaksanaan logger yang betul (Logback, Log4j, JUL) tanpa pemanggil mengetahui pelaksanaan yang digunakan.
Logger log = LoggerFactory.getLogger(MyService.class);
log.info("Service started");Semakan Ringkas
Apakah ciri utama corak Kaedah Kilang?
Imbas Kembali
Kaedah Kilang mengasingkan penciptaan objek daripada klien dengan meletakkan keputusan instantiasi dalam kaedah subkelas yang boleh digantikan. Gunakannya apabila sesuatu kelas tidak dapat menjangka objek yang perlu diciptanya.
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 Kaedah Kilang” percuma?
Ya — teks penuh “Corak Kaedah Kilang” 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 Kaedah Kilang”?
Takrifkan kaedah kilang dalam kelas asas dan biarkan subkelas menentukan produk yang hendak dicipta. 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 Kaedah Kilang” 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
- Singleton: Pelaksanaan Selamat Benang
- Corak Kaedah Kilang
- Kilang Abstrak untuk Keluarga Produk
- Corak Builder dengan API Lancar