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.
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.
Recommended Posts