Memahami perbezaan antara corak reka bentuk Kilang, Kaedah Kilang dan Abstrak Kilang boleh mencabar. Untuk menjelaskannya, berikut ialah penjelasan bagi setiap corak dan cara ia berbeza:
Corak Kilang mencipta objek tanpa mendedahkan logik instantiasi kepada klien. Ia merujuk kepada objek yang baru dibuat melalui antara muka biasa. Pada dasarnya, ia memudahkan corak Kaedah Kilang.
Kaedah Kilang mentakrifkan antara muka untuk mencipta objek, membenarkan subkelas menentukan kelas mana yang hendak dijadikan instantiat. Sama seperti corak Kilang, ia menggunakan antara muka biasa untuk merujuk objek yang dicipta.
Corak Kilang Abstrak menyediakan antara muka untuk mencipta keluarga objek berkaitan tanpa menyatakan kelas konkritnya secara eksplisit. Corak ini berguna apabila anda perlu mencipta berbilang objek dengan antara muka yang konsisten.
Pattern | Differences | When to Use |
---|---|---|
Factory | Simplified version of Factory Method | Use when you need a fixed, object-creation mechanism without subclassing. |
Factory Method | Generic base class with specific creation logic handled by subclasses | Use when you need to vary the object type based on the subclass implementation. |
Abstract Factory | Creates related objects of the same type | Use when you need to ensure consistency in creating object families for dependency injection or strategy patterns. |
Kilang:
<code class="java">public class FruitFactory { public Fruit makeFruit(String type) { switch (type) { case "Apple": return new Apple(); case "Orange": return new Orange(); default: throw new IllegalArgumentException("Invalid fruit type"); } } }</code>
Kaedah Kilang:
<code class="java">abstract class FruitPicker { protected abstract Fruit makeFruit(); public void pickFruit() { Fruit fruit = makeFruit(); // Perform operations using fruit... } } class ApplePicker extends FruitPicker { @Override protected Fruit makeFruit() { return new Apple(); } } class OrangePicker extends FruitPicker { @Override protected Fruit makeFruit() { return new Orange(); } }</code>
Kilang Abstrak:
<code class="java">interface FruitPlantFactory { public Plant makePlant(); public Picker makePicker(); } class AppleFactory implements FruitPlantFactory { @Override public Apple makePlant() { return new Apple(); } @Override public ApplePicker makePicker() { return new ApplePicker(); } } class OrangeFactory implements FruitPlantFactory { @Override public Orange makePlant() { return new Orange(); } @Override public OrangePicker makePicker() { return new OrangePicker(); } }</code>
Atas ialah kandungan terperinci Apakah perbezaan antara corak reka bentuk Kilang, Kaedah Kilang dan Kilang Abstrak, dan bila setiap corak perlu digunakan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!