Fabrique objet avec nbr parametre variable [Résolu]

Messages postés
38
Date d'inscription
mardi 29 octobre 2013
Statut
Membre
Dernière intervention
6 novembre 2014
- - Dernière réponse : seichan94
Messages postés
38
Date d'inscription
mardi 29 octobre 2013
Statut
Membre
Dernière intervention
6 novembre 2014
- 5 avril 2014 à 22:22
Bonjour à tous,

Je souhaite un petit coup de main si vous avez 5 min...je vous en re-merci !

je vous explique, j'ai une fabrique d'objet qui contient

un objet abstract avec les attribut :
atrib1, attrib2, attrib3

puis des objet concret qui on pour attribut :

objet concret1 :
super(atrib1, attrib2, attrib3)
attrib4
attrib5

objet concret2 :
super(atrib1, attrib2, attrib3)
attrib7
attrib6

puis dans un main()

je fait un objet = monterObjet(Enum.objetConcret1, attrib1, attrib2, attrib3)

mais comment je fait pour passer les attribut 4&5 ou 6&7
je vais pas créer autant de méthode que de possibilité... c'est pas très dynamique non ?


voila donc soit j'y suis pas du tout soit je ne vois pas la solution qui est devant moi.

Merci pour votre aide je retourne a mon casse tête
Bonne soirée a tous
Afficher la suite 

5 réponses

Meilleure réponse
Messages postés
16040
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
19 octobre 2019
88
2
Merci
Bonsoir,

Lorsque tu parles de "fabrique" tu parles du design pattern Factory ou ça n'a rien à voir ?

"un objet abstract"
Ceci n'a pas de sens, une classe ou une méthode peuvent être abstraites, mais jamais un objet !

"je vais pas créer autant de méthode que de possibilité..."
Parfois on n'a pas le choix, même si dans ton cas tu pourrais avoir une seule méthode comme ceci :

Object monterObjet(Enum type, Object[] param)

Dire « Merci » 2

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 194 internautes nous ont dit merci ce mois-ci

Commenter la réponse de KX
Messages postés
16040
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
19 octobre 2019
88
1
Merci
Ce code n'est pas valide, on ne mets jamais de boucle for à l'intérieur des parenthèses d'une méthode...

Object x = objectConcret1( 
   for(Object o : param) 
       (?)Object x = o; 
);

Le plus simple est sûrement d'avoir une Factory très souple et déléguer aux constructeurs la charge de se débrouiller avec les paramètres.

public final class Fabrique
{
    public static Abstraite monterObjet(Enum type, Object...param)
    {
        switch (type)
        {
            case objetConcret1 : return new Concret1(param);
            case objetConcret2 : return new Concret2(param);
            default : return null;
        } 
    }
}

public abstract class Abstraite
{
    public Abstraite(Object attrib1, Object attrib2, Object attrib3)
    {
        this.attrib1 = (String) attrib1;
        this.attrib2 = (Integer) attrib2;
        this.attrib3 = (Double) attrib3;
    }
}

public class Concret1 extends Abstraite
{
    public Concret1(Object attrib1, Object attrib2, Object attrib3, Object attrib4, Object attrib5)
    {
        super(attrib1, attrib2, attrib3);
        this.attrib4 = (Long) attrib4;
        this.attrib5 = (String) attrib5;
    }

    public Concret1(Object[] param)
    {
        this(param[0], param[1], param[2], param[3], param[4]);
    }
}

public class Concret2 extends Abstraite
{
    public Concret2(Object attrib1, Object attrib2, Object attrib3, Object attrib6, Object attrib7)
    {
        super(attrib1, attrib2, attrib3);
        this.attrib6 = (Byte) attrib6;
        this.attrib7 = (Short) attrib7;
    }

    public Concret1(Object[] param)
    {
        this(param[0], param[1], param[2], param[3], param[4]);
    }
}
Commenter la réponse de KX
Messages postés
38
Date d'inscription
mardi 29 octobre 2013
Statut
Membre
Dernière intervention
6 novembre 2014
0
Merci
Bonsoir KX

oui je parle bien de pattern factory, pardon je me suis tres mal exprime
Et donc je parle bien d une classe abtract d un type d objet general qui prend en compte une partie des attributs

Alors tu me dit qur je peut faire passer un tableu de param ou encore Object... o d apres ce que j ai trouvé, mais est-il possible de faire cela et si non que faire ? :

Je récupère donc le tableau de parametre et je fait :
Object x = new objectConcret1(
for(Object o : param)
(?)Object x = o;
);

En gros derouler le tableau de param dans mon instance
Peut etre avec un 2eme tableau qui contient le type pour chaque param pour faire un cast

Merci beaucoup pour ton intervention
Commenter la réponse de seichan94
Messages postés
38
Date d'inscription
mardi 29 octobre 2013
Statut
Membre
Dernière intervention
6 novembre 2014
0
Merci
Ah ok !
Je comprend mieux avec ton exemple c est top !
Je test cela demain il ce fait tard je te dit si j ai réussi demain et je clôture le poste en conséquence...

Merci beaucoup je vais mieux dormir >_<#

Bonne nuit
Sei
Commenter la réponse de seichan94
Messages postés
38
Date d'inscription
mardi 29 octobre 2013
Statut
Membre
Dernière intervention
6 novembre 2014
0
Merci
Bonsoir KX

Merci pour ton aide c est parfait, comme d'habitude !
Je cloture
Commenter la réponse de seichan94