IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Intérêt d'une factory versus un new


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de donkeyquote
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    195
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 195
    Par défaut Intérêt d'une factory versus un new
    Bonjour,

    Je suis en train d'étudier l'utilisation des dessign patterns ...

    J'ai une question par rapport aux factories.

    En fait je voudrais savoir les avantages et les inconvenients d'utiliser des factories, pourquoi utiliser une factory à la place d'un simple "new" d'une classe, dans quels cas les utiliser ...

    Merci !!

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    La factory, c'est un new virtuel.
    Avec une factory, pas besoin de connaître la classe, il suffit d'avoir un pointeur vers ladite factory...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    La factory, c'est un new virtuel.
    Avec une factory, pas besoin de connaître la classe, il suffit d'avoir un pointeur vers ladite factory...
    Exactement. Si ton code est écrit pour une interface (la fabrique, classe abstraite), il fonctionnera pour toute nouvelle classe qui dérive de celle ci par polymorphisme.
    Lorsque ton code utilise plein de classes concrètes, tu devras modifier ce code à chaque ajout de nouvelles classes concrètes. Ce qui ne respecte pas le principe "ouvert - fermé".
    En fournissant un pointeur vers une fabrique, tu te gardes bien d'instancier directement une classe abstraite.

    -> cf http://come-david.developpez.com/tut...?page=sommaire

  4. #4
    Invité
    Invité(e)
    Par défaut
    Il y a aussi d'autres avantages secondaires: une fonction factory peut changer de type de produit ou initialiser le produit différemment en fonction, par exemple, d'une option de la ligne de commande ou d'une valeur de configuration. Elle peut également accumuler des statistiques sur les créations d'objet, etc..

    Carl

  5. #5
    Membre confirmé Avatar de donkeyquote
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    195
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 195
    Par défaut
    Merci de vos reponses qui m'ont éclairé assez .

    Maintenant je me pose une question ...

    Comment ça se passe au niveau de la destruction des objets générés par une factory ? C'est au client de la factory de les desallouer ou bien la destruction est encapsullée ?

    Dans l'exemple du tutoriel des factories de developpez.com (http://come-david.developpez.com/tut...Fabrique#LIV-2)... il ne faudrait pas desallouer quelque part les objects qui sont crées ?

  6. #6
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 296
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 296
    Par défaut
    Généralement la factory est une source de données, et le client obtient la responsabilité de déclencher la libération.
    Toutefois si la factory renvoie un handle/pointeur intelligent plutôt qu'un pointeur, alors la libération peut être implicite (et déterministe)
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

Discussions similaires

  1. Connection à une BDD avec un new mdw
    Par electrosat03 dans le forum Sécurité
    Réponses: 3
    Dernier message: 19/01/2007, 11h23
  2. Intérêt d'une classe abstraite
    Par sandytarit dans le forum Langage
    Réponses: 6
    Dernier message: 21/11/2006, 14h41
  3. intérêt d'une solution
    Par FamiDoo dans le forum MFC
    Réponses: 5
    Dernier message: 13/06/2006, 11h10
  4. [Data Access Object]Intérêt de la factory ?
    Par le Daoud dans le forum Général Java
    Réponses: 2
    Dernier message: 21/04/2005, 09h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo