0% ont trouvé ce document utile (0 vote)
14 vues6 pages

Design Pattern : Fabrique Abstraite en Java

Le document présente le design pattern Abstract Factory, qui permet de créer des objets regroupés en familles sans connaître leurs classes concrètes. Ce pattern isole le code client des classes d'implémentation, facilite l'échange d'objets et favorise la cohérence. Il inclut également des exemples d'implémentation pour créer des formes et des couleurs via des fabriques abstraites.

Transféré par

ohsalma96
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
14 vues6 pages

Design Pattern : Fabrique Abstraite en Java

Le document présente le design pattern Abstract Factory, qui permet de créer des objets regroupés en familles sans connaître leurs classes concrètes. Ce pattern isole le code client des classes d'implémentation, facilite l'échange d'objets et favorise la cohérence. Il inclut également des exemples d'implémentation pour créer des formes et des couleurs via des fabriques abstraites.

Transféré par

ohsalma96
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Département de Mathématiques et Informatique

Elément : Génie logiciel


Génie Informatique 2
Année universitaire : 2022/2023

TP No 4
Objectif : Design Pattern (Abstract Factory)

I. Description
Abstract Factory est un design pattern. Il est presque similaire à Factory Pattern, à la différence qu’il
ressemble plus à une fabrique des fabriques (factory of factories).

Le but du pattern Abstract Factory est la création d’objets regroupés en familles sans devoir connaître
les classes concrètes destinées à la création de ces objets. Il fournit une interface unique pour instancier
des objets d'une même famille sans avoir à connaître les classes à instancier.

Dans le pattern Abstract Factory, une interface est responsable de la création d'une fabrique d'objets
associés sans spécifier explicitement leurs classes.

II. Avantage
• Abstract Factory Pattern isole le code client des classes concrètes (d'implémentation).
• Il facilite l'échange de familles d'objets.
• Il favorise la cohérence entre les objets.

III. Utilisation
Utilisez la fabrique abstraite si votre code a besoin de manipuler des produits d’un même thème, mais que
vous ne voulez pas qu’il dépende des classes concrètes de ces produits soit vous ne les connaissez pas encore,
soit vous voulez juste rendre votre code évolutif.

• Lorsque le système doit être indépendant de la façon dont ses objets sont créés, composés et
représentés.
• Lorsque la famille d'objets associés doit être utilisée ensemble.
• Lorsque vous souhaitez fournir une bibliothèque d'objets qui ne montre pas les implémentations et
ne révèle que les interfaces.
• Lorsque le système doit être configuré avec l'un d'une famille d'objets multiples.

IV. Implémentation de la classe Abstract Factory via un exemple


ShapeFactory va être la fabrique qui permet d'instancier le Shape correspondant au type passé en paramètre
de sa méthode createShape(ShapeType).

GI2 -Génie Logiciel- 1


public enum ShapeType {
carre, cercle, rectangle
}

public class ShapeFactory extends AbstractFactory{


public Shape createShape(ShapeType type) {
if(type==[Link])
return new Carre();
else if(type==[Link])
return new Rectangle();
else if(type==[Link])
return new Cercle();
else
return null;

@Override
public Color createColor(ColorType type) {
// TODO Auto-generated method stub
return null;
}

}
public abstract class Shape {
public abstract void afficherShape();
}

public class Carre extends Shape {

@Override
public void afficherShape() {
// TODO Auto-generated method stub
[Link]("Carre");
}

public class Cercle extends Shape{

GI2 -Génie Logiciel- 2


@Override
public void afficherShape() {
// TODO Auto-generated method stub
[Link]("Cercle");

public class Rectangle extends Shape{

@Override
public void afficherShape() {
// TODO Auto-generated method stub
[Link]("Rectangle");
}

De même pour la classe ColorFactory, elle va nous permettre d’instancier les couleurs correspondant au type
passé en paramètre de sa méthode createColor(ColorType).

Il faut signaler que Shape et Color se sont des classes abstraites ainsi que ShapeFactory et ColorFactory se
sont des fabriques.

public enum ColorType {


red, blue,green
}

public class ColorFactory extends AbstractFactory{


public Color createColor(ColorType type) {
if(type==[Link])
return new Red();
else if(type==[Link])
return new Blue();

GI2 -Génie Logiciel- 3


else if(type==[Link])
return new Green();
else return null;
}

@Override
public Shape createShape(ShapeType type) {
// TODO Auto-generated method stub
return null;
}

public abstract class Color {


public abstract void afficherColor();
}

public class Red extends Color{

@Override
public void afficherColor() {
// TODO Auto-generated method stub
[Link]("Rouge");
}

public class Blue extends Color{

@Override
public void afficherColor() {
// TODO Auto-generated method stub
[Link]("Bleu");
}

public class Green extends Color{

@Override
public void afficherColor() {
// TODO Auto-generated method stub
[Link]("Vert");
}

La classe AbstractFactory : Créez une classe abstraite ou interface pour obtenir les fabriques pour des objets
couleur(Color) et de forme(Shape).

GI2 -Génie Logiciel- 4


public abstract class AbstractFactory {
public abstract Shape createShape(ShapeType type);
public abstract Color createColor(ColorType type);
}

Créer une classe teste et exécuter le code suivant dans la méthode principale :
public static void main(String[] args)

{
Scanner reader = new Scanner([Link]);
AbstractFactory objet;
[Link]("Voulez-vous utiliser des formes (1) ou des couleur (2) :");
String choix = [Link]();
if ([Link]("1"))
objet= new ShapeFactory();
else
objet= new ColorFactory();
}

Dans la méthode Main essayer d’appeler la méthode afficherColor et afficherShape en accedant à ces deux
méthodes via l’objet objet
import [Link];

public class Test {

public static void main(String[] args) {


// TODO Auto-generated method stub
Scanner reader = new Scanner([Link]);
AbstractFactory objet;
[Link]("Voulez-vous utiliser des formes (1) ou des couleur (2) :");
String choix = [Link]();
if ([Link]("1"))
{
objet= new ShapeFactory();
[Link]([Link]).afficherShape();

}
else
GI2 -Génie Logiciel- 5
{
objet= new ColorFactory();
[Link]([Link]).afficherColor();
}

GI2 -Génie Logiciel- 6

Vous aimerez peut-être aussi