[JAVA] Modèle de conception (1): AbstractFactory

Qu'est-ce que Abstract Factory

En créant une classe (Factory) spécialisée dans l'instanciation Un modèle de conception qui crée définitivement des instances pertinentes. En d'autres termes, une implémentation dans laquelle les instances qui peuvent être créées sont déterminées pour chaque classe Factory.

Étape ①

Créez une classe (= classe Factory) qui crée des classes associées. ** Exemple): Tokyo et le japonais, Washington DC et l'anglais sont liés. ** **

Factory.java


public interface Factory {
	Capital getCapital();
	Language getLanguage();
}

JapanFactory.java


//Classe d'usine japonaise
public class JapanFactory implements Factory {
	@Override
	public Capital getCapital() {
		return new Tokyo(); //La capitale est Tokyo
	}

	@Override
	public Language getLanguage() {
		return new Japanese(); //La langue est le japonais
	}
}

UsaFactory.java


//Classe d'usine américaine
public class UsaFactory implements Factory {
	@Override
	public Capital getCapital() {
		return new WashingtonDC(); //La capitale est Washington DC
	}

	@Override
	public Language getLanguage() {
		return new English(); //La langue est l'anglais
	}
}

Étape ②

Créez une classe qui hérite de la classe abstraite qui est la valeur de retour de la méthode implémentée dans l'interface Factory. Cette classe est la classe qui est réellement retournée par chaque classe Factory. ** Exemple): la classe Tokyo qui hérite de la classe Capital et la classe Washington DC sont en fait renvoyées par la classe Factory. ** **

Capital.java


public abstract class Capital {
    //Les champs ici ne sont pas particulièrement pertinents pour la description de AbstractFactory.
	protected String name;
	protected int population;
}

Tokyo.java


public class Tokyo extends Capital {
	public Tokyo() {
		this.name = "Tokyo";
		this.population = 13510000;
	}
}

WashingtonDC.java


public class WashingtonDC extends Capital {
	public WashingtonDC() {
		this.name = "Washington D.C";
		this.population = 601723;
	}
}

Étape ③

Implémentez le processus de génération de la classe Factory côté appelant. À ce stade, une branche pour changer la classe Factory est requise.

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("Le nom de la capitale est" + 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();
		}
	}
}

Résultat d'exécution


Le nom de la capitale est Tokyo
La population est de 13510000

mérite

En créant une instance via la classe Factory, vous pouvez créer en toute sécurité une instance associée. ** → En créant une instance Japan Factory, vous pouvez toujours créer une instance Tokyo et une instance japonaise. ** ** (Si vous créez explicitement une instance, vous pouvez créer une instance avec la mauvaise combinaison.)

De plus, puisque la valeur de retour est acquise par la classe abstraite, l'appelant n'a pas à se soucier de l'implémentation interne de la classe Factory. ** → Il n'est pas nécessaire de connaître le type d'implémentation de la classe Tokyo ou de la classe Washington DC. ** **

Recommended Posts

Modèle de conception (1): AbstractFactory
Modèle de conception ~ Constructeur ~
Modèle de conception ~ Visiteur ~
Modèle de conception Java
Modèle de conception ~ État ~
Modèle de conception ~ Stratégie ~
Modèle de conception ~ Singleton ~
Modèle de conception ~ Composite ~
Modèle de conception (2): constructeur
Modèle de conception ~ Commande ~
Modèle de conception ~ Itérateur ~
Modèle de conception ~ Façade ~
Modèle de conception ~ Pont ~
Modèle de conception ~ Médiateur ~
Modèle de conception ~ Décorateur ~
Modèle de conception ~ Interprète ~
Modèle de conception ~ Observateur ~
Modèle de conception ~ Prototype ~
Modèle de conception ~ Memento ~
Modèle de conception ~ Adaptateur ~
Modèle de conception ~ Poids mouche ~
Modèle de conception C ++ (modèle TemplateMethod)
Modèle de conception ~ Méthode d'usine ~
Modèle de conception ~ Usine abstraite ~
Résumé du modèle de conception du GoF
Modèle de conception ~ Méthode de modèle ~
Résumé du modèle de conception Java
Modèle de conception ~ Chaîne de responsabilité ~
[Design pattern] Bibliothèque de base Java
Modèle de conception mâché C #: TemplateMethod
Exemple d'application du modèle de conception (n ° 1)
Modèle de conception Java pour débutant (modèle de méthode d'usine)
Motif de souvenir
Motif médiateur
Modèle d'itérateur
Motif composite
Modèle d'observateur
Modèle de constructeur
Modèle de pont
Modèle de commande
Modèle de stratégie
Modèle d'itérateur
Modèle de visiteur
Modèle d'adaptateur
Modèle de proxy
Modèle de stratégie
Motif composite
Motif singleton
Motif singleton
Modèle de prototype
[Modèle de conception] Logique commune avec la méthode de modèle
Modèle de façade
Motif décorateur
Modèle de poids mouche
Motif décorateur
Modèle de médiateur
Motif de façade
Modèle de visiteur
Modèle de pont
PrintObserver "Modèle de conception d'observateur: description et exemple d'implémentation"
Repenser le modèle d'expression et de conception de flux Java8 Lambda - Modèle de commande -