abstract factory et factory

abstract factory et factory - C++ - Programmation

Marsh Posté le 08-01-2009 à 17:12:02    

Bonjour,
 
Quelle est la différence entre ces deux pattern ?
 
Dans quel cas utiliser l'un plutôt que l'autre, je m'en sors pas ...
 
Merci


---------------
je connais tout, je ne sais rien, seule certitude, à vouloir trop on finit par tout perdre.
Reply

Marsh Posté le 08-01-2009 à 17:12:02   

Reply

Marsh Posté le 08-01-2009 à 17:22:14    

De tete et en gros, la Factory file une interface pr creer des instances de classes avec une interface donnée via un ID.
L'AbstractFactory est une Factory que tu peut surclasser et dont le choix des objets à construire est déléguée aux classes filles. C'ets comme une factory à factory

Reply

Marsh Posté le 08-01-2009 à 17:37:25    

hum ok


---------------
je connais tout, je ne sais rien, seule certitude, à vouloir trop on finit par tout perdre.
Reply

Marsh Posté le 08-01-2009 à 19:29:35    

google sans déconner

Reply

Marsh Posté le 08-01-2009 à 22:05:47    

je trouvais rien de très appétissant. Il y a un nombre assez conséquent de personnes qui savent présenter ces patterns d'une manière incompréhensible...


---------------
je connais tout, je ne sais rien, seule certitude, à vouloir trop on finit par tout perdre.
Reply

Marsh Posté le 08-01-2009 à 22:34:26    

Je trouve que wikipedia s'en sort bien.
Factory : http://en.wikipedia.org/wiki/Factory_method_pattern
Abstract Factory : http://en.wikipedia.org/wiki/Abstract_factory_pattern

Reply

Marsh Posté le 08-01-2009 à 23:09:57    

et t'arrives à comprendre la différence d'une manière clair et limpide rien qu'en lisant ces articles ? t'as pas des questions qui te reste du style , on peut pas faire avec le premier pattern ce qu'on fait avec le deuxième pattern ?


---------------
je connais tout, je ne sais rien, seule certitude, à vouloir trop on finit par tout perdre.
Reply

Marsh Posté le 08-01-2009 à 23:22:11    

bon enfin c'est vrai que ça à l'air pas mal, je vais méditer un peu dessus
 
EDIT : ué bon finalement c vraiment juste ce que disais Joel F ok ok


Message édité par frenchtoucco le 08-01-2009 à 23:33:12

---------------
je connais tout, je ne sais rien, seule certitude, à vouloir trop on finit par tout perdre.
Reply

Marsh Posté le 09-01-2009 à 10:47:05    

frenchtoucco a écrit :

et t'arrives à comprendre la différence d'une manière clair et limpide rien qu'en lisant ces articles ? t'as pas des questions qui te reste du style , on peut pas faire avec le premier pattern ce qu'on fait avec le deuxième pattern ?


Bah c'est de la branlette de nouille de DP, comme d'habitude.

Reply

Marsh Posté le 09-01-2009 à 12:43:50    

cash


---------------
je connais tout, je ne sais rien, seule certitude, à vouloir trop on finit par tout perdre.
Reply

Marsh Posté le 09-01-2009 à 12:43:50   

Reply

Marsh Posté le 08-05-2009 à 15:48:33    

Reply

Marsh Posté le 08-05-2009 à 20:47:04    

pour le plaisir et ça pourra servir à d'autre :
 

Code :
  1. template <class ManufacturedType, typename ClassIDKey=std::string>
  2. class GenericFactory
  3. {
  4. public:
  5. typedef std::auto_ptr<ManufacturedType> (*BaseCreateFn)();
  6.     typedef std::map<ClassIDKey, BaseCreateFn> FnRegistry;
  7.     FnRegistry registry;
  8. public:
  9.     static GenericFactory &instance(){ static GenericFactory bf; return bf; }
  10.     void RegCreateFn(const ClassIDKey &, BaseCreateFn);
  11.     std::auto_ptr<ManufacturedType> Create(const ClassIDKey &className) const;
  12. };
  13. ///////////////////////////////
  14. template <class ManufacturedType, typename ClassIDKey>
  15. void GenericFactory<ManufacturedType,ClassIDKey>::RegCreateFn(const ClassIDKey & className, BaseCreateFn fn)
  16. {
  17.     registry[className] = fn;
  18. }
  19. ///////////////////////////////
  20. template <class ManufacturedType, typename ClassIDKey>
  21. std::auto_ptr<ManufacturedType> GenericFactory<ManufacturedType,ClassIDKey>::Create(const ClassIDKey &className) const
  22. {
  23.     std::auto_ptr<ManufacturedType> theObject(0);
  24.     FnRegistry::const_iterator regEntry = registry.find(className);
  25.     if (regEntry != registry.end())
  26.     {
  27.         theObject= regEntry->second();
  28.     }
  29.     return theObject;
  30. }
  31. template <class AncestorType, class ManufacturedType, typename ClassIDKey=std::string>
  32. class RegisterInFactory
  33. {
  34. public:
  35.     static std::auto_ptr<AncestorType> CreateInstance()
  36.     {
  37.         return std::auto_ptr<AncestorType>(new ManufacturedType);
  38.     }
  39.     RegisterInFactory(const ClassIDKey &id)
  40.     {
  41.         GenericFactory<AncestorType>::instance().RegCreateFn(id, CreateInstance);
  42.     }
  43. };
  44. struct Figure
  45. {virtual void SeDessiner(){cout<<"Je suis une Figure"<<endl;}};
  46. struct Carre : public Figure
  47. {void SeDessiner(){cout<<"Je suis un Carre"<<endl;}};
  48. struct Voiture
  49. {virtual void SeDessiner(){cout<<"Je suis une Voiture"<<endl;}};
  50. struct Ferrari : public Voiture
  51. { void SeDessiner(){cout<<"Je suis une Ferrari"<<endl;}};
  52. int main()
  53. {
  54. RegisterInFactory<Voiture, Voiture> registerMe("Voiture" );
  55. RegisterInFactory<Voiture, Ferrari> registerMe2("Ferrari" );
  56. RegisterInFactory<Figure, Carre> registerMe3("Carre" );
  57. GenericFactory<Voiture>::instance().Create("Voiture" )->SeDessiner();
  58. GenericFactory<Figure>::instance().Create("Carre" )->SeDessiner();
  59. GenericFactory<Voiture>::instance().Create("Ferrari" )->SeDessiner();
  60. system("pause" );
  61. }

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed