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