Java Academy · Pelajaran

Corak Kaedah Kilang

Takrifkan kaedah kilang dalam kelas asas dan biarkan subkelas menentukan produk yang hendak dicipta.

Pelajaran 2 daripada 413 langkah

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 hierarchy

Kaedah 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.

Percuma untuk bermula

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

  1. Singleton: Pelaksanaan Selamat Benang
  2. Corak Kaedah Kilang
  3. Kilang Abstrak untuk Keluarga Produk
  4. Corak Builder dengan API Lancar
← Kembali ke Java Academy