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