Compréhension Pattern Factory Method
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:
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;
} |
Code:
1 2 3 4 5 6
| int main()
{
Createur *v=Createur::createVoiture("it");
f(v);
return 0;} |
1) En quoi dans ce code peut-on dire que la méthode createVoiture est une méthode de Fabrication ?
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++ ?