Durch Erstellen einer Klasse (Factory), die sich auf Instanziierung spezialisiert hat Ein Entwurfsmuster, das definitiv relevante Instanzen erstellt. Mit anderen Worten, eine Implementierung, in der die Instanzen erstellt werden können, die für jede Factory-Klasse erstellt werden können.
Erstellen Sie eine Klasse (= Factory-Klasse), die verwandte Klassen erstellt. ** Beispiel): Tokio und Japanisch, Washington DC und Englisch sind verwandt. ** **.
Factory.java
public interface Factory {
Capital getCapital();
Language getLanguage();
}
JapanFactory.java
//Japanische Fabrikklasse
public class JapanFactory implements Factory {
@Override
public Capital getCapital() {
return new Tokyo(); //Die Hauptstadt ist Tokio
}
@Override
public Language getLanguage() {
return new Japanese(); //Die Sprache ist Japanisch
}
}
UsaFactory.java
//Amerikanische Fabrikklasse
public class UsaFactory implements Factory {
@Override
public Capital getCapital() {
return new WashingtonDC(); //Die Hauptstadt ist Washington DC
}
@Override
public Language getLanguage() {
return new English(); //Die Sprache ist Englisch
}
}
Erstellen Sie eine Klasse, die die abstrakte Klasse erbt, die den Rückgabewert der in der Factory-Schnittstelle implementierten Methode darstellt. Diese Klasse ist die Klasse, die tatsächlich von jeder Factory-Klasse zurückgegeben wird. ** Beispiel): Die Tokyo-Klasse, die die Capital-Klasse und die Washington DC-Klasse erbt, wird tatsächlich von der Factory-Klasse zurückgegeben. ** **.
Capital.java
public abstract class Capital {
//Die Felder hier sind für die Beschreibung von AbstractFactory nicht besonders relevant.
protected String name;
protected int population;
}
Tokyo.java
public class Tokyo extends Capital {
public Tokyo() {
this.name = "Tokio";
this.population = 13510000;
}
}
WashingtonDC.java
public class WashingtonDC extends Capital {
public WashingtonDC() {
this.name = "Washington D..C";
this.population = 601723;
}
}
Implementieren Sie den Prozess zum Generieren der Factory-Klasse auf der Aufruferseite. Zu diesem Zeitpunkt ist ein Zweig zum Wechseln der Factory-Klasse erforderlich.
Main.java
public class Main {
public static void main(String[] args) {
String name = "Japan";
Factory factory = createFactory(name);
Capital capital = factory.getCapital();
Language language = factory.getLanguage();
System.out.println("Der Name der Hauptstadt ist" + capital.name);
System.out.println("Population" + capital.population);
}
private static Factory createFactory(String name) {
switch (name) {
case "Japan":
return new JapanFactory();
case "USA":
return new UsaFactory();
default:
throw new IllegalArgumentException();
}
}
}
Ausführungsergebnis
Der Name der Hauptstadt ist Tokio
Bevölkerung ist 13510000
Durch Erstellen einer Instanz über die Factory-Klasse können Sie sicher eine verwandte Instanz erstellen. ** → Durch Erstellen einer Japan Factory-Instanz können Sie jederzeit eine Tokyo-Instanz und eine japanische Instanz erstellen. ** **. (Wenn Sie explizit eine Instanz erstellen, erstellen Sie möglicherweise eine Instanz mit der falschen Kombination.)
Da der Rückgabewert von der abstrakten Klasse erfasst wird, muss sich der Aufrufer auch nicht um die interne Implementierung der Factory-Klasse kümmern. ** → Es ist nicht erforderlich zu wissen, um welche Art von Implementierung es sich bei der Tokyo-Klasse oder der Washington DC-Klasse handelt. ** **.
Recommended Posts