[JAVA] Modèle de conception (2): constructeur

Qu'est-ce que Builder

Lorsqu'un traitement commun est requis entre plusieurs instances, en masquant ce traitement Une implémentation qui permet le même traitement mais un traitement interne différent. Ici, les Japonais et les Américains sont créés sur la base de la classe People, qui a un champ appelé mainLanguage.

Étape ①

Créez une interface qui définit le traitement commun entre plusieurs instances. (= Classe Builder)

Builder.java


public interface Builder {
	void createMainLanguage(); //Définir la langue principale
	People getResult(); //Instance de retour de personnes
}

People.java


public class People {
    //matière
	private String mainLanguage;

	public String getMainLanguage() {
		return mainLanguage;
	}

	public void setMainLanguage(String mainLanguage) {
		this.mainLanguage = mainLanguage;
	}
	
	void hello() {
		System.out.println("Bonjour. La langue principale est" + mainLanguage);
	}
}

Étape ②

Créez une classe avec une implémentation de l'interface définie. (= Classe ConcreteBuilder) ** Lorsque les types d'instances à créer augmentent, génèrent et augmentent cette classe **

JapaneseBuilder.java


//Constructeur japonais
public class JapaneseBuilder implements Builder {
	private People people;
	
	public JapaneseBuilder() {
		this.people = new People();
	}

	@Override
	public void createMainLanguage() {
		people.setMainLanguage("Japanese"); //Le japonais est la langue principale
	}

	@Override
	public People getResult() {
		return this.people;
	}
}

AmericanBuilder.java


//Constructeur américain
public class AmericanBuilder implements Builder {
	private People people;
	
	public AmericanBuilder() {
		this.people = new People();
	}

	@Override
	public void createMainLanguage() {
		people.setMainLanguage("English"); //L'anglais est la langue principale
	}

	@Override
	public People getResult() {
		return this.people;
	}
}

Étape ③

Créez une classe responsable de l'instanciation réelle. (= Classe de directeur) ** * Assurez-vous d'avoir l'interface comme argument du constructeur ** En passant Builder à Director, il devient indépendant de la classe ConcreteBuilder. En d'autres termes, Director ne sait pas ce qu'est la classe réelle, ConcreteBuilder.

Director.java


public class Director {
	private Builder builder;
	
	public Director(Builder builder) {
		this.builder = builder;
	}
	
	public People construct() {
		builder.createMainLanguage();
		return builder.getResult();
	}
}

Comment appeler

(1) Créez une instance de générateur qui a une interface de générateur comme type. Le traitement réel dépend de ConcreteBuilder au moment de la génération. (2) Créez une instance de Director avec l'instance de générateur comme argument.

Main.java


public class Main {
	public static void main(String[] args) {
		if (args[0].equals("Japanese")) {
			//Générer un constructeur japonais
			Builder builder = new JapaneseBuilder();
			//Director ne fait que passer l'interface Bulder, donc il ne connaît même pas l'implémentation interne de Builder.
			Director director = new Director(builder);
			People people = director.construct();
			people.hello();
		} else if (args[0].equals("English")) {
			Builder builder = new AmericanBuilder();
			Director director = new Director(builder);
			People people = director.construct();
			people.hello();
		} else {
			throw new IllegalArgumentException();
		}
	}
}

Recommended Posts

Modèle de conception ~ Constructeur ~
Modèle de conception (2): constructeur
Modèle de constructeur
Modèle de constructeur
Modèle de conception ~ Visiteur ~
Modèle de conception Java
Modèle de conception ~ Proxy ~
Modèle de conception ~ État ~
Modèle de conception ~ Stratégie ~
Modèle de conception ~ Composite ~
Modèle de conception (1): AbstractFactory
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 ~
Modèle de générateur (Java effectif)
Résumé du modèle de conception Java
Introduction aux modèles de conception (Builder)
Modèle de conception ~ Chaîne de responsabilité ~
[Design pattern] Bibliothèque de base Java
Repenser les modèles de conception avec les expressions lambda Java8 et Stream --Builder pattern -
Modèle de conception par la méthode Ruby Template Mémo de modèle
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)
Modèle de prototype
Motif de souvenir
Motif médiateur
Modèle d'itérateur
Motif composite
Modèle d'objet mère et modèle de générateur de données de test
Modèle d'observateur
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