Bonsoir,
Il y a quelque chose que je ne saisis pas compl�tement. J'essaie de comprendre ce pattern mais rien n'y fait ..
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 class Createur { public : virtual std::string getMarque() const=0; friend std::ostream &operator<<(std::ostream &o,const Createur *v) { return o << v->getMarque(); } static Createur *createVoiture(std::string o); }; class CreateurConcretRenault : public Createur { public: std::string getMarque() const { return "Renault"; } }; class CreateurConcretFiat : public Createur { public: std::string getMarque() const { return "Fiat"; } }; void f(const Createur *v) { std::cout << "Voiture " << v << std::endl; } Createur *Createur::createVoiture(std::string o) { if(o=="fr") return new CreateurConcretRenault(); if(o=="it") return new CreateurConcretFiat(); return 0; }1) En quoi dans ce code peut-on dire que la m�thode createVoiture est une m�thode de Fabrication ?
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6 int main() { Createur *v=Createur::createVoiture("it"); f(v); return 0;}
Serait-ce parce que on ne cr�er pas directement l'objet � partir d'un new mais � partir d'une m�thode qui s'occupe de cela ?
2)Son utilis�, c'est donc pour �tre " plus efficace " ?
3)D'ailleurs dans le main , si on regarde bien , on ne voit plus le type concret ( on ne fait pas de new concret , du genre newRenaut,newFiat ) , serait-ce la raison ? Faire en sorte que le type concret n'apparait pas dans le main ?
4) Derniere question : J'ai vu que certains disaient que les m�thodes statiques n'�taient pas un bon choix , et qu'il pr�f�rait cr�er un objet puis appliquer la m�thode � cette instance. Mais comment faire cela sachant qu'on ne peut pas instancier une classe abstraite en c++ ?
Partager