Cet article résume la méthode Factory. Selon wikipedia, «En remplaçant les constructeurs d'autres classes par vos propres méthodes qui peuvent être écrasées par des sous-classes, vous pouvez pousser la création d'objets spécifiques à l'application vers des sous-classes et améliorer la réutilisabilité des classes». Référence: Modèle de méthode d'usine
** Personnages principaux **
NO | Nom | rôle |
---|---|---|
1 | Auteur(Creator) | Définir une interface pour instancier un produit |
2 | Classe concrète du créateur | Instanciez le produit. |
3 | Produit(Product) | Produit(Objets que vous souhaitez créer avec un modèle de conception)Définir l'interface de |
4 | Classe spécifique de produit | Classe d'implémentation de produit |
Dans ce modèle, l'interface pour instancier une classe est définie dans la classe abstraite supérieure et l'instanciation est effectuée dans la sous-classe qui implémente la classe abstraite. Ce modèle est parfois appelé «laissez la sous-classe décider quelle classe instancier». Cela signifie que la classe concrète du créateur n'a aucune connaissance du produit (les informations nécessaires sont héritées du créateur), et le simple fait de décider de la sous-classe à utiliser détermine automatiquement le produit à utiliser (la classe concrète du produit). est.
** Implémentez le modèle ** La classe représente les pizzerias par région. Créez une classe pour contenir les données de pizza et une classe pour chaque magasin.
** Produit **
Pizza.java
import java.time.LocalDateTime;
public class Pizza {
String name;
String dough;
String sauce;
public void accept() {
System.out.println(LocalDateTime.now() + "Du client" + this.name + "J'ai reçu votre commande");
};
public void prepare() {
System.out.println("en préparation···");
};
public void bake() {
System.out.println("Cuire");
};
public void cut() {
System.out.println("Couper");
};
public void box() {
System.out.println("Pack");
}
public String getName() {
return name;
}
}
** Classe de produit béton **
TokyoCheesePizza.java
public class TokyoCheesePizza extends Pizza{
public TokyoCheesePizza() {
name = "Pizza au fromage fabriqué à Tokyo";
dough = "Tissu de Tokyo";
sauce = "Source de Tokyo";
}
}
OsakaCheesePizza.java
public class OsakaCheesePizza extends Pizza {
public OsakaCheesePizza() {
name = "Pizza au fromage fabriqué à Osaka";
dough = "Tissu Osaka";
sauce = "Source d'Osaka";
}
public void box() {
System.out.println("Nous vous le livrerons dans une boîte spéciale au magasin d'Osaka");
}
}
Auteur
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);
}
** Classe de béton du créateur **
TokyoOrder.java
public class TokyoOrder extends Order {
public Pizza createPizza(String type) {
if (type.equals("fromage")) return new TokyoCheesePizza();
else return new Pizza();
}
}
OsakaOrder.java
public class OsakaOrder extends Order {
public Pizza createPizza(String type) {
if (type.equals("fromage")) return new OsakaCheesePizza();
else return new Pizza();
}
}
** Classe principale **
Main.java
public class Main {
public static void main (String args[]) {
Order tk = new TokyoOrder();
Order os = new OsakaOrder();
Pizza tkpz = tk.OrderPizza("fromage");
System.out.println(tkpz.getName() + "j'ai commandé");
Pizza ospz = os.OrderPizza("fromage");
System.out.println(ospz.getName() + "j'ai commandé");
}
}
résultat
2017-05-22T17:02:41.553 Nous avons reçu une commande de pizza à base de fromage fabriqué à Tokyo d'un client.
en préparation···
Cuire
Couper
Pack
J'ai commandé une pizza à base de fromage fabriqué à Tokyo
2017-05-22T17:02:41.553 Nous avons reçu une commande de pizza à base de fromage fabriqué à Osaka d'un client.
en préparation···
Cuire
Couper
Nous vous le livrerons dans une boîte spéciale au magasin d'Osaka
J'ai commandé une pizza avec du fromage fabriqué à Osaka
Dans cet exemple, le modèle a été appliqué avec la pizza elle-même comme produit. Remplacement de la pizza par des produits, avec des commandes de pizzerias en tant que créateurs. Au fur et à mesure que les types de pizzas augmentent, le nombre de classes de produits augmente, le nombre de branches de créateurs augmente et l'impact des changements est réduit aux sous-classes (○○ Order.java, ○○ Pizza.java).
Recommended Posts