[JAVA] Entwurfsmuster (1): AbstractFactory

Was ist abstrakte Fabrik?

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.

Schritt ①

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

Schritt ②

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

Schritt ③

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

verdienen

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

Entwurfsmuster (1): AbstractFactory
Entwurfsmuster ~ Builder ~
Entwurfsmuster ~ Besucher ~
Java-Entwurfsmuster
Entwurfsmuster ~ Zustand ~
Entwurfsmuster ~ Strategie ~
Entwurfsmuster ~ Singleton ~
Entwurfsmuster ~ Composite ~
Entwurfsmuster (2): Builder
Entwurfsmuster ~ Befehl ~
Entwurfsmuster ~ Iterator ~
Entwurfsmuster ~ Fassade ~
Entwurfsmuster ~ Brücke ~
Entwurfsmuster ~ Mediator ~
Entwurfsmuster ~ Dekorateur ~
Entwurfsmuster ~ Interpreter ~
Entwurfsmuster ~ Beobachter ~
Entwurfsmuster ~ Prototyp ~
Entwurfsmuster ~ Memento ~
Entwurfsmuster ~ Adapter ~
Entwurfsmuster ~ Fliegengewicht ~
C ++ - Entwurfsmuster (TemplateMethod-Muster)
Entwurfsmuster ~ Fabrikmethode ~
Entwurfsmuster ~ Abstrakte Fabrik ~
Zusammenfassung des GoF-Entwurfsmusters
Entwurfsmuster ~ Vorlagenmethode ~
Zusammenfassung des Java-Entwurfsmusters
Entwurfsmuster ~ Verantwortungskette ~
[Entwurfsmuster] Java-Kernbibliothek
C # gekautes Designmuster: TemplateMethod
Anwendungsbeispiel für Entwurfsmuster (Nr. 1)
Java-Anfänger-Entwurfsmuster (Factory-Methodenmuster)
Erinnerungsmuster
Vermittlermuster
Iteratormuster
Zusammengesetztes Muster
Beobachtermuster
Builder-Muster
Brückenmuster
Befehlsmuster
Strategiemuster
Iteratormuster
Besuchermuster
Adaptermuster
Proxy-Muster
Strategiemuster
Zusammengesetztes Muster
Singleton-Muster
Singleton-Muster
Prototypmuster
[Entwurfsmuster] Allgemeine Logik mit der Vorlagenmethode
Fassadenmuster
Dekorationsmuster
Fliegengewichtsmuster
Dekorateur Muster
Vermittlermuster
Fassadenmuster
Besuchermuster
Brückenmuster
PrintObserver "Observer Design Pattern: Beschreibung und Implementierungsbeispiel"
Überdenken des Entwurfsmusters mit Java8 Lambda-Ausdruck & Stream - Befehlsmuster -