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