Pengenalan
Dalam C , corak kaedah kilang membenarkan instantiasi objek melalui kaedah kilang dan bukannya pembina. Corak reka bentuk ini telah menjadi subjek perdebatan kerana komplikasi yang dirasakan dan kebimbangan prestasi.
Menyangkal Salah Tanggapan Biasa
1. Pembina Sentiasa Mencukupi:
Walaupun pembina penting, ia tidak selalunya sesuai untuk proses pembinaan yang kompleks atau senario di mana beban lampau pembina bermasalah (mis., mewakili koordinat). Kaedah kilang menawarkan penyelesaian yang berdaya maju dalam kes sedemikian.
2. Kesederhanaan Java Tidak Diterjemahkan kepada C :
Peruntukan dinamik menggunakan kilang, seperti yang dilihat di Java, walaupun secara mudah, mengehadkan pengguna kepada pengurusan memori dinamik. Pendekatan ini tidak sesuai untuk sistem atau senario terbenam di mana peruntukan statik diutamakan.
3. Pulangan-oleh-Nilai Bukan Penyelesaian Sejagat:
Walaupun memulangkan nilai boleh memudahkan pelaksanaan kilang, ia boleh memperkenalkan penalti prestasi akibat penyingkiran salinan dan isu dengan objek yang tidak boleh disalin. Selain itu, menukar nama kaedah untuk mengelakkan overloading menjejaskan kejelasan dan ketekalan kod.
4. Pembinaan Dua Fasa Mempunyai Had:
Memisahkan peruntukan objek daripada permulaan boleh membawa kepada kod yang sukar digunakan dan menimbulkan cabaran dalam memulakan ahli const dan pembina kelas asas.
Pendekatan yang Diperbaiki
Untuk menangani batasan ini, pelaksanaan corak kaedah kilang yang lebih berkesan dalam C melibatkan:
Menggunakan kilang statik beban berlebihan untuk pembina pada jenis terbitan:
class Base { public: Base(){} static std::shared_ptr<Base> createCartesian(float x, float y); }; class Derived:public Base { public: static std::shared_ptr<Derived> createPolar(float angle, float magnitude); };
Melaksanakan "Kilang Kilang" kelas:
class Factory { public: virtual std::shared_ptr<Base> create() = 0; }; class CartesianFactory: public Factory { public: virtual std::shared_ptr<Base> create() { return std::make_shared<Base>(x, y); // use Cartesian constructor } };
Pendekatan ini:
Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan Corak Kaedah Kilang dengan Cekap dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!