Rumah  >  Artikel  >  Java  >  Apakah perbezaan antara corak reka bentuk Kilang, Kaedah Kilang dan Kilang Abstrak, dan bila setiap corak perlu digunakan?

Apakah perbezaan antara corak reka bentuk Kilang, Kaedah Kilang dan Kilang Abstrak, dan bila setiap corak perlu digunakan?

Barbara Streisand
Barbara Streisandasal
2024-11-04 06:08:01988semak imbas

What are the differences between Factory, Factory Method, and Abstract Factory design patterns, and when should each be used?

Kaedah Kilang lwn Kilang lwn Kilang Abstrak: Memahami Perbezaan

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:

Kilang

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

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.

Kilang Abstrak

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.

Perbezaan dan Bila Perlu Digunakan

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.

Contoh Java

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn