[JAVA] Introduction aux modèles de conception (méthode d'usine)

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

Introduction aux modèles de conception (méthode d'usine)
Introduction aux modèles de conception (Abstract Factory)
Introduction aux modèles de conception (introduction)
Introduction aux modèles de conception (Builder)
Introduction aux modèles de conception (composite)
Introduction aux modèles de conception (poids mouche)
Introduction au prototype de modèles de conception
Introduction aux modèles de conception (Iterator)
Introduction aux modèles de conception (stratégie)
Introduction aux algorithmes avec la méthode java-Shakutori
Modèle de conception Java pour débutant (modèle de méthode d'usine)
Modèle de conception important pour améliorer la maintenabilité
Modèles de conception à utiliser avec les bibliothèques Java fréquemment utilisées - Modèle d'usine
Introduction à Ruby 2
Méthode de recherche
Modèle de méthode d'usine
Modèles de conception Java
Introduction à web3j
Introduction à Micronaut 1 ~ Introduction ~
[Java] Introduction à Java
Introduction à la migration
Modèle de méthode d'usine
Introduction à Java
Introduction à Doma
Introduction aux fichiers JAR
Introduction à Ratpack (8) - Session
Modèle de conception ~ Usine abstraite ~
Introduction à l'arithmétique des bits
Introduction à Ratpack (6) - Promesse
Introduction à Ratpack (9) --Thymeleaf
Introduction à PlayFramework 2.7 ① Présentation
J'ai lu Hiroshi Yuki "Introduction aux modèles de conception appris en langage Java" (SB Creative)
Introduction à la mise en page Android
Méthode d'usine statique partie 1
Introduction à la programmation pratique
Introduction à la commande javadoc
Introduction à la commande jar
Introduction à Ratpack (2) -Architecture
[Rails] conçoit une méthode d'introduction
Introduction au style lambda
Introduction à la commande java
Modèle de conception ~ Méthode de modèle ~
Introduction au développement de Keycloak
Étudier les modèles de conception du GoF
16 Correspond à l'invocation de méthode
Introduction à la commande javac
Point 51: Concevoir soigneusement les signatures de méthode
Introduction au développement d'applications Android
Introduction à Ratpack (5) --Json & Registry
Introduction à la métabase ~ Construction de l'environnement ~
(Installation par points) Introduction à Java8_Impression
Introduction à Micronaut 2 ~ Test unitaire ~
Introduction à JUnit (note d'étude)
Introduction à Spring Boot ① ~ DI ~