[JAVA] Einführung in Design Patterns (Abstract Factory)

Dieser Artikel fasst Abstract Factory zusammen. Laut Wikipedia bietet "eine Möglichkeit, eine Reihe verwandter Instanzen je nach Situation ordnungsgemäß zu generieren." Referenz: [Entwurfsmuster (Software)](https://ja.wikipedia.org/wiki/%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3%E3%83 % 91% E3% 82% BF% E3% 83% BC% E3% 83% B3_ (% E3% 82% BD% E3% 83% 95% E3% 83% 88% E3% 82% A6% E3% 82% A7% E3% 82% A2)))

Ich habe auf den folgenden Artikel verwiesen. Denken: Entwurfsmuster (abstraktes Fabrikmuster) Abstract Factory zum Implementieren und Verstehen von GoF-Entwurfsmustern in Java

Wenn Sie die Methoden einer anderen Klasse aus einer Klasse verwenden möchten, müssen Sie "new class name ()" mit Ausnahme der statischen Klasse instanziieren. In diesem Entwurfsmuster wird das, was für die aufrufende Klasse neu war, in eine Klassengruppe namens Factory verschoben, und die Instanz der Klasse, die Sie verwenden möchten, wird über die von der Factory-Klasse gehaltene Methode erfasst.

Implementierungsbeispiel

Abstract Factory ist der Fall des Betankens mit hoher Oktanzahl und regelmäßig an einer Tankstelle.

NO Dateiname Klasseninhalte
1 AbstractFactory.java Eine abstrakte Klasse, die das Auftanken definiert
2 ConcreteHighFactory.java Betonklasse zum Tanken mit hoher Oktanzahl
3 ConcreteRegularFactory.java Betonklasse zum regelmäßigen Auftanken
4 AbstractRefueling.java Auftanken abstrakter Klasse
5 ConcreteHighRefueling.java Betonbetonklasse mit hoher Oktanzahl
6 ConcreteRegularRefueling.java Regelmäßige Betankung Betonklasse
7 Main.java Klasse, die ausgeführt werden soll

Java

AbstractFactory.java


public abstract AbstractFactory {
    abstract AbstractRefueling getAbstractRefueling();
}

ConcreteHighFactory.java


public class ConcreteHighFactory extends AbstractFactory {
    @Override
    public AbstractRefueling getAbstractRefueling();
        return new ConcreteHighRefueling();
    }
}

ConcreteRegularFactory.java


public class ConcreteRegularFactory extends AbstractFactory {
    @Override
    public AbstractRefueling getAbstractRefueling();
        return new ConcreteRegularRefueling();
    }
}

AbstractRefueling.java


public abstract class AbstractRefueling {
    abstract payment();
    abstract refueling();
}

ConcreteHighRefueling.java


public class ConcreteHighRefueling extends AbstractRefueling {
    @Override
    public payment() {};
    @Override
    public refueling() {};
}

ConcreteRegularRefueling.java


public class ConcreteRegularRefueling extends AbstractRefueling {
    @Override
    public payment() {};
    @Override
    public refueling() {};
}

Main.java


public class Main {
    public static void main(String... args) {
        Factory fa = exec("High");
        AbstractRefueling ab = fa.getAbstractRefueling();
    }
    private static Factory exec(String env) {
        if (env == "high") {
                return new ConcreteHighFactory();
        } else if (env == "regular") {
                return new ConcreteRegularFactory();
        }
    }
}

Wie oben erwähnt, erhalten wir die Klasse zum Betanken von Benzin mit hoher Oktanzahl unter der Annahme, dass bei der Hauptmethode Benzin mit hoher Oktanzahl hinzugefügt wird. Bei Bedarf können Sie es durch andere in der Factory-Klasse definierte Funktionen ersetzen, indem Sie Conclete ~ Factory in der exec-Methode in Main.java neu schreiben. In diesem Fall haben wir auch zwei Typen implementiert: hochoktanig und regulär. Wenn Sie jedoch einen Verarbeitungstyp wie Leichtöl hinzufügen müssen, können Sie einfach eine Klasse hinzufügen, da diese abstrahiert ist, und die vorhandene Es kann gesagt werden, dass es wenig Einfluss auf hochoktanige und reguläre Klassen hat. Obwohl es flexibel ist, Klassen hinzuzufügen, erstreckt sich der Einflussbereich beim Hinzufügen von Teilen (in diesem Beispiel Hinzufügen einer Fensterreinigungsmethode zusätzlich zur Betankungsmethode) auf alle Factory-Klassen.

Liste der Entwurfsmuster

Recommended Posts

Einführung in Design Patterns (Abstract Factory)
Einführung in Entwurfsmuster (Factory-Methode)
Einführung in Entwurfsmuster (Einführung)
Einführung in Entwurfsmuster (Builder)
Einführung in Entwurfsmuster (Composite)
Einführung in Designmuster (Fliegengewicht)
Einführung in Entwurfsmuster Prototyp
Einführung in Entwurfsmuster (Iterator)
Einführung in Entwurfsmuster (Strategie)
Entwurfsmuster ~ Abstrakte Fabrik ~
Wichtiges Entwurfsmuster zur Verbesserung der Wartbarkeit
Entwerfen Sie Muster für häufig verwendete Java-Bibliotheken - Fabrikmuster
abstraktes Fabrikmuster
Einführung in Ruby 2
Verschiedene Designmuster
Abstraktes Fabrikmuster
Java-Entwurfsmuster
Einführung in web3j
Einführung in Micronaut 1 ~ Einführung ~
[Java] Einführung in Java
Einführung in die Migration
Einführung in Java
Einführung in Doma
Einführung in JAR-Dateien
Einführung in Ratpack (8) -Session
Entwurfsmuster ~ Fabrikmethode ~
Einführung in die Bitarithmetik
Einführung in Ratpack (6) --Promise
Einführung in Ratpack (9) - Thymeleaf
Einführung in PlayFramework 2.7 ① Übersicht
Ich las Hiroshi Yuki "Einführung in Designmuster, die in Java gelernt wurden" (SB Creative)
Einführung in das Android-Layout
Einführung in die praktische Programmierung
Einführung in den Befehl javadoc
Einführung in den Befehl jar
Einführung in Ratpack (2) -Architektur
Einführung in den Lambda-Stil
Einführung in den Java-Befehl
Einführung in die Keycloak-Entwicklung
Studieren Sie GoF-Entwurfsmuster
Einführung in den Befehl javac
Einführung in die Android App-Entwicklung
Einführung in Ratpack (5) --Json & Registry
Einführung in Ratpack (7) - Guice & Spring
(Punktinstallation) Einführung in Java8_Impression
Einführung in Micronaut 2 ~ Unit Test ~
[Java] Einführung in den Lambda-Ausdruck
Einführung in Spring Boot ② ~ AOP ~
Einführung in Apache Beam (2) ~ ParDo ~
Einführung in die EHRbase 2-REST-API
[Java] Einführung in die Stream-API