Heim > Java > javaLernprogramm > Hauptteil

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

Barbara Streisand
Freigeben: 2024-11-04 06:08:01
Original
987 Leute haben es durchsucht

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage