Bonsoir,
Je n'arrive pas à comprendre l'intérêt du pattern Factory par rapport au polymorphisme.
Voilà deux codes qui font la même chose :
1ère version
main.cpp
factory.h
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 #include <iostream> #include "factory.h" using namespace std; int main() { Fabrique* factory = new Fabrique(); if (factory) { Form* f1 = factory->create("cercle"); Form* f2 = factory->create("carree"); f1->Dessiner(); f2->Dessiner(); delete f1, f2, factory; } return 0; }
form.h
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 #ifndef FACTORY_H_INCLUDED #define FACTORY_H_INCLUDED #include "form.h" class Fabrique { public: Form* create(std::string quoi) { if (quoi == "cercle") return new Cercle(); if (quoi == "carree") return new Carree(); return NULL; } }; #endif // FACTORY_H_INCLUDED
2eme version :
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
32
33
34
35
36
37 #ifndef FORM_H_INCLUDED #define FORM_H_INCLUDED class Form { public: virtual void Dessiner() = 0; }; class Cercle : public Form { public: Cercle(){}; ~Cercle(){}; inline virtual void Dessiner() { std::cout << "Je suis un cercle" << std::endl; } }; class Carree : public Form { public: Carree(){}; ~Carree(){}; inline virtual void Dessiner() { std::cout << "Je suis un carree" << std::endl; } }; #endif // FORM_H_INCLUDED
main.cpp
form.h
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 #include <iostream> #include "form.h" using namespace std; int main() { Form* f1 = new Cercle; f1->Dessiner(); Form* f2 = new Carree; f2->Dessiner(); delete f1, f2; return 0; }
Pour moi, la 2eme version est plus facile d'utilisation pour un résultat identique.
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
32
33
34
35
36
37 #ifndef FORM_H_INCLUDED #define FORM_H_INCLUDED class Form { public: virtual void Dessiner() = 0; }; class Cercle : public Form { public: Cercle(){}; ~Cercle(){}; inline virtual void Dessiner() { std::cout << "Je suis un cercle" << std::endl; } }; class Carree : public Form { public: Carree(){}; ~Carree(){}; inline virtual void Dessiner() { std::cout << "Je suis un carree" << std::endl; } }; #endif // FORM_H_INCLUDED
A mon avis, j'ai mal compris l'idée du pattern Factory :
http://come-david.developpez.com/tut...e=Fabrique#LIV
Pourtant, je pense l'avoir bien implémenté...
Pouvez vous m'éclairez d'avantage ?
Merci à tous
Partager