[JAVA] Einführung in Entwurfsmuster (Factory-Methode)

Dieser Artikel fasst die Factory-Methode zusammen. Laut Wikipedia "können Sie durch Ersetzen der Konstruktoren anderer Klassen durch Ihre eigenen Methoden, die von Unterklassen überschrieben werden können, die anwendungsspezifische Objekterstellung auf Unterklassen übertragen und die Wiederverwendbarkeit von Klassen verbessern." Referenz: Factory Method Pattern

** Hauptcharaktere **

NO Name Rolle
1 Autor(Creator) Definieren Sie eine Schnittstelle zum Instanziieren eines Produkts
2 Konkrete Klasse des Schöpfers Instanziieren Sie das Produkt.
3 Produkt(Product) Produkt(Objekte, die Sie mit einem Entwurfsmuster erstellen möchten)Definieren Sie die Schnittstelle von
4 Spezifische Produktklasse Produktimplementierungsklasse

In diesem Muster wird die Schnittstelle zum Instanziieren einer Klasse in der oberen abstrakten Klasse definiert, und die Instanziierung wird in der Unterklasse durchgeführt, die die abstrakte Klasse implementiert. Dieses Muster wird manchmal als "Lassen Sie die Unterklasse entscheiden, welche Klasse instanziiert werden soll" bezeichnet werden. Dies bedeutet, dass die konkrete Klasse des Erstellers keine Kenntnis des Produkts hat (die erforderlichen Informationen werden vom Ersteller geerbt). Durch einfaches Entscheiden der zu verwendenden Unterklasse wird das zu verwendende Produkt (die konkrete Klasse des Produkts) automatisch bestimmt. ist.

** Implementiere das Muster ** Wir werden die Pizzerien nach Regionen in der Klasse ausdrücken. Erstellen Sie eine Klasse für Pizzadaten und eine Klasse für jedes Geschäft.

** Produkt **

Pizza.java


import java.time.LocalDateTime;
public class Pizza {
	String name;
	String dough;
	String sauce;

    public void accept() {
    	System.out.println(LocalDateTime.now() + "Vom Kunden" + this.name + "Ich habe Ihre Bestellung erhalten");
    };
    public void prepare() {
    	System.out.println("in Vorbereitung···");
    };
    public void bake() {
    	System.out.println("Backen");
    };
    public void cut() {
    	System.out.println("Schnitt");
    };
    public void box() {
    	System.out.println("Pack");
    }
	public String getName() {
		return name;
	}
}

** Konkrete Produktklasse **

TokyoCheesePizza.java


public class TokyoCheesePizza extends Pizza{
	public TokyoCheesePizza() {
		name = "Pizza mit Käse aus Tokio";
		dough = "Tokio Stoff";
		sauce = "Tokio Quelle";
	}
}

OsakaCheesePizza.java


public class OsakaCheesePizza extends Pizza {
	public OsakaCheesePizza() {
		name = "Pizza mit Käse aus Osaka";
		dough = "Osaka Stoff";
		sauce = "Osaka Quelle";
	}
	public void box() {
		System.out.println("Wir werden es in einer speziellen Box im Geschäft in Osaka liefern");
	}
}

Autor

Order.java


public abstract class Order {
	public Pizza OrderPizza(String type) {
		Pizza pz = createPizza(type);
		pz.accept();
		pz.prepare();
		pz.bake();
		pz.cut();
		pz.box();
		return pz;
	}
	abstract Pizza createPizza(String type);
}

** Konkrete Klasse des Schöpfers **

TokyoOrder.java


public class TokyoOrder extends Order {
	public Pizza createPizza(String type) {
		if (type.equals("Käse")) return new TokyoCheesePizza();
		else return new Pizza();
	}
}

OsakaOrder.java


public class OsakaOrder extends Order {
	public Pizza createPizza(String type) {
		if (type.equals("Käse")) return new OsakaCheesePizza();
		else return new Pizza();
	}
}

** Hauptklasse **

Main.java


public class Main {
	public static void main (String args[]) {
		Order tk = new TokyoOrder();
		Order os = new OsakaOrder();	
		Pizza tkpz = tk.OrderPizza("Käse");
		System.out.println(tkpz.getName() + "ich bestellte");
		Pizza ospz = os.OrderPizza("Käse");
		System.out.println(ospz.getName() + "ich bestellte");
	}
}

Ergebnis


2017-05-22T17:02:41.553 Wir haben von einem Kunden eine Bestellung für eine Pizza mit Käse aus Tokio erhalten.
in Vorbereitung···
Backen
Schnitt
Pack
Ich bestellte eine Pizza mit Käse aus Tokio
2017-05-22T17:02:41.553 Wir haben von einem Kunden eine Bestellung für eine Pizza mit Käse aus Osaka erhalten.
in Vorbereitung···
Backen
Schnitt
Wir werden es in einer speziellen Box im Geschäft in Osaka liefern
Ich bestellte eine Pizza mit Käse aus Osaka

In diesem Beispiel wurde das Muster mit der Pizza selbst als Produkt angewendet. Pizza durch Produkte ersetzen, Pizza bestellen als Schöpfer. Wenn die Arten von Pizzen zunehmen, nimmt die Anzahl der Produktklassen zu, die Anzahl der Erstellerzweige nimmt zu und die Auswirkung von Änderungen wird auf Unterklassen eingegrenzt (○○ Order.java, ○○ Pizza.java).

Recommended Posts

Einführung in Entwurfsmuster (Factory-Methode)
Einführung in Design Patterns (Abstract Factory)
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)
Einführung in Algorithmen mit der Java-Shakutori-Methode
Java-Anfänger-Entwurfsmuster (Factory-Methodenmuster)
Wichtiges Entwurfsmuster zur Verbesserung der Wartbarkeit
Entwerfen Sie Muster für häufig verwendete Java-Bibliotheken - Fabrikmuster
Einführung in Ruby 2
Suchmethode
Factory Method Pattern
Java-Entwurfsmuster
Einführung in web3j
Einführung in Micronaut 1 ~ Einführung ~
[Java] Einführung in Java
Einführung in die Migration
Factory Method Muster
Einführung in Java
Einführung in Doma
Einführung in JAR-Dateien
Einführung in Ratpack (8) -Session
Entwurfsmuster ~ Abstrakte Fabrik ~
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
statische Werksmethode Teil 1
Einführung in die praktische Programmierung
Einführung in den Befehl javadoc
Einführung in den Befehl jar
Einführung in Ratpack (2) -Architektur
[Rails] entwickeln eine Einführungsmethode
Einführung in den Lambda-Stil
Einführung in den Java-Befehl
Entwurfsmuster ~ Vorlagenmethode ~
Einführung in die Keycloak-Entwicklung
Studieren Sie GoF-Entwurfsmuster
16 Entspricht dem Methodenaufruf
Einführung in den Befehl javac
Punkt 51: Signaturen der Entwurfsmethode sorgfältig
Einführung in die Android App-Entwicklung
Einführung in Ratpack (5) --Json & Registry
Einführung in Metabase ~ Umgebungskonstruktion ~
(Punktinstallation) Einführung in Java8_Impression
Einführung in Micronaut 2 ~ Unit Test ~
Einführung in JUnit (Studiennotiz)
Einführung in Spring Boot ~ ~ DI ~