Heim >Java >javaLernprogramm >Was sind die Unterschiede zwischen den Entwurfsmustern „Factory', „Factory Method' und „Abstract Factory' und wann sollten sie jeweils verwendet werden?

Was sind die Unterschiede zwischen den Entwurfsmustern „Factory', „Factory Method' und „Abstract Factory' und wann sollten sie jeweils verwendet werden?

Barbara Streisand
Barbara StreisandOriginal
2024-11-04 06:08:011038Durchsuche

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

Factory vs. Factory Method vs. Abstract Factory: Die Unterschiede verstehen

Die Unterschiede zwischen den Entwurfsmustern Factory, Factory Method und Abstract Factory zu verstehen, kann eine Herausforderung sein. Zur Verdeutlichung finden Sie hier eine Erklärung der einzelnen Muster und ihrer Unterschiede:

Factory

Das Factory-Muster erstellt Objekte, ohne dem Client die Instanziierungslogik zugänglich zu machen. Es verweist über eine gemeinsame Schnittstelle auf das neu erstellte Objekt. Im Wesentlichen vereinfacht es das Muster der Factory-Methode.

Factory-Methode

Die Factory-Methode definiert eine Schnittstelle zum Erstellen von Objekten, sodass Unterklassen entscheiden können, welche Klasse instanziiert werden soll. Ähnlich wie das Factory-Muster verwendet es eine gemeinsame Schnittstelle, um auf das erstellte Objekt zu verweisen.

Abstract Factory

Das Abstract Factory-Muster bietet eine Schnittstelle zum Erstellen einer Familie verwandter Objekte, ohne deren konkrete Klassen anzugeben ausdrücklich. Dieses Muster ist nützlich, wenn Sie mehrere Objekte mit einer konsistenten Schnittstelle erstellen müssen.

Unterschiede und Verwendungszweck

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.

Java-Beispiele

Fabrik:

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

Fabrikmethode:

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

Abstrakte Fabrik:

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

Das obige ist der detaillierte Inhalt vonWas sind die Unterschiede zwischen den Entwurfsmustern „Factory', „Factory Method' und „Abstract Factory' und wann sollten sie jeweils verwendet werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn