« Patrons de conception/Monteur » : différence entre les versions

Contenu supprimé Contenu ajouté
m 39 versions depuis w:Monteur (patron de conception) : Patrons de conception/Monteur
+ liens + UML
Ligne 1 :
{{Patrons de conception}}
Le '''monteur''' (''builder'') est un [[patron de conception]] utilisé pour la création d'une variété d'objets complexes à partir d'un objet source. L'objet source peut consister en une variété de parties contribuant individuellement à la création de chaque objet complet grâce à un ensemble d'appels à l'interface commune de la classe abstraite ''Monteur''.
{{Patron de conception|Monteur|Builder|Construire un objet complexe partie par partie, à l'aide de différents monteurs possibles}}
 
Le '''monteur''' (''builder'') est un [[../|patron de conception]] utilisé pour la création d'une variété d'objets complexes à partir d'un objet source. L'objet source peut consister en une variété de parties contribuant individuellement à la création de chaque objet complet grâce à un ensemble d'appels à l'interface commune de la classe abstraite ''Monteur''.
 
Un exemple d'objet source est une liste de caractères ou d'images dans un message devant être codé. Un objet directeur est nécessaire pour fournir les informations à propos de l'objet source vers la classe ''Monteur''. La classe ''Monteur'' abstraite pourrait être une liste d'appel de l'interface que la classe directeur utilise comme par exemple ''handleCharacter()'' ou ''handleImage()''. Chaque version concrète de la classe ''Monteur'' pourrait implémenter une méthode pour ces appels ou bien simplement ignorer l'information si appelée. Un exemple de monteur concret serait ''enigmaBuilder'' qui crypterait le texte, mais ignorerait les images.
Ligne 9 ⟶ 12 :
 
== Diagramme de classes ==
La structure des classes du patron de conception Monteur peut être représenté par le diagramme de classes UML suivant :
[[Image:Monteur_classes.png|Monteur collaborations|Monteur Structure]]
[[Image:UML DP Monteur.png|center|Diagramme UML des classes du patron de conception Monteur]]
 
* '''Monteur'''
** interface abstraite pour construire des produitsobjets
 
* '''MonteurConcretMonteur1''' et '''Monteur2'''
** fournitfournissent une implémentation de Monteur
** construitconstruisent et assembleassemblent les différentes parties des produitsobjets
 
* '''Directeur'''
** construit un objet utilisant la méthode de conception Monteur
 
* '''ProduitObjet'''
** l'objet complexe en cours de construction
 
== ExempleExemples ==
=== Java ===
 
<source lang="java">
/* Produit */
class Pizza
{
private String pate = "";
private String sauce = "";
private String garniture = "";
 
public void setPate(String pate) { this.pate = pate; }
public void setSauce(String sauce) { this.sauce = sauce; }
public void setGarniture(String garniture) { this.garniture = garniture; }
}
 
 
/* Monteur */
abstract class MonteurPizza
{
protected Pizza pizza;
 
public Pizza getPizza() { return pizza; }
public void creerNouvellePizza() { pizza = new Pizza(); }
 
public abstract void monterPate();
public abstract void monterSauce();
public abstract void monterGarniture();
}
 
/* MonteurConcret */
class MonteurPizzaHawaii extends MonteurPizza
{
public void monterPate() { pizza.setPate("croisée"); }
public void monterSauce() { pizza.setSauce("douce"); }
public void monterGarniture() { pizza.setGarniture("jambon+ananas"); }
}
 
/* MonteurConcret */
class MonteurPizzaPiquante extends MonteurPizza
{
public void monterPate() { pizza.setPate("feuilletée"); }
public void monterSauce() { pizza.setSauce("piquante"); }
public void monterGarniture() { pizza.setGarniture("pepperoni+salami"); }
}
 
 
/* Directeur */
class Serveur
{
private MonteurPizza monteurPizza;
 
public void setMonteurPizza(MonteurPizza mp) { monteurPizza = mp; }
public Pizza getPizza() { return monteurPizza.getPizza(); }
 
public void construirePizza() {
{
monteurPizza.creerNouvellePizza();
monteurPizza.monterPate();
monteurPizza.monterSauce();
monteurPizza.monterGarniture();
}
}
 
 
/* Un client commandant une pizza. */
class ExempleMonteur
{
public static void main(String[] args) {
{
Serveur serveur = new Serveur();
MonteurPizza monteurPizzaHawaii = new MonteurPizzaHawaii();
MonteurPizza monteurPizzaPiquante = new MonteurPizzaPiquante();
 
serveur.setMonteurPizza(monteurPizzaHawaii);
serveur.construirePizza();
 
Pizza pizza = serveur.getPizza();
}
}
</source>
 
=== PHP ===
 
<source lang="php">
/* Produit */
class Pizza {
private $_pate = "";
private $_sauce = "";
private $_garniture = "";
 
public function setPate($pate) { $this->_pate = $pate; }
public function setSauce($sauce) { $this->_sauce = $sauce; }
public function setGarniture($garniture) { $this->_garniture = $garniture; }
}
 
Ligne 115 ⟶ 124 :
/* Monteur */
abstract class MonteurPizza {
protected $_pizza;
 
public function getPizza() { return $this->_pizza; }
public function creerNouvellePizza() { $this->_pizza = new Pizza(); }
 
abstract public function monterPate();
abstract public function monterSauce();
abstract public function monterGarniture();
}
 
/* MonteurConcret */
class MonteurPizzaHawaii extends MonteurPizza {
public function monterPate() { $this->_pizza.setPate("croisée"); }
public function monterSauce() { $this->_pizza.setSauce("douce"); }
public function monterGarniture() { $this->_pizza.setGarniture("jambon+ananas"); }
}
 
/* MonteurConcret */
class MonteurPizzaPiquante extends MonteurPizza {
public function monterPate() { $this->_pizza.setPate("feuilletée"); }
public function monterSauce() { $this->_pizza.setSauce("piquante"); }
public function monterGarniture() { $this->_pizza.setGarniture("pepperoni+salami"); }
}
 
Ligne 142 ⟶ 151 :
/* Directeur */
class Serveur {
private $_monteurPizza;
 
public function setMonteurPizza(MonteurPizza $mp) { $this->_monteurPizza = $mp; }
public function getPizza() { return $this->_monteurPizza->getPizza(); }
 
public void construirePizza() {
$this->_monteurPizza->creerNouvellePizza();
$this->_monteurPizza->monterPate();
$this->_monteurPizza->monterSauce();
$this->_monteurPizza->monterGarniture();
}
}
 
Ligne 169 ⟶ 178 :
=== Patrons associés ===
 
* [[../Fabrique (patron de conception)|Fabrique]]
* [[../Fabrique abstraite (patron de conception)|Fabrique Abstraite]]
* [[../Patron de méthode (patron de conception)|Patron de méthode]]
 
{{Portail informatique}}
 
[[Catégorie:Patron de conception]]
 
[[Catégorie:PatronPatrons de conception (livre)]]
[[bg:Строител (шаблон)]]
[[de:Builder (Entwurfsmuster)]]
[[en:Builder pattern]]
[[es:Builder (patrón de diseño)]]
[[it:Builder]]
[[ja:Builder パターン]]
[[ko:Builder 패턴]]
[[pl:Budowniczy (wzorzec projektowy)]]
[[pt:Builder]]
[[ru:Строитель (шаблон проектирования)]]
[[uk:Будівник (шаблон проектування)]]
[[zh:生成器 (设计模式)]]