Bonjour
Je voudrais savoir si le décorateur, telle qu'il est défini ici:
http://come-david.developpez.com/tut...=Decorateur#LV
correspond au visitor, défini ici:
http://en.wikipedia.org/wiki/Visitor_pattern
merci
Bonjour
Je voudrais savoir si le décorateur, telle qu'il est défini ici:
http://come-david.developpez.com/tut...=Decorateur#LV
correspond au visitor, défini ici:
http://en.wikipedia.org/wiki/Visitor_pattern
merci
Euh, nan qu'est ce qui te fait penser à ca ?
D'ailleurs, cet article est en cours de ré-écriture profonde, il est à prendre avec précaution.
"Never use brute force in fighting an exponential." (Andrei Alexandrescu)
Mes articles dont Conseils divers sur le C++
Une très bonne doc sur le C++ (en) Why linux is better (fr)
le fait qu'il est écrit:
Un décorateur, c'est pour moi un pattern pour lequel on va définir des algorithmes qui vont s'appliquer à plusieurs objets, mais de types différents.In object-oriented programming and software engineering, the visitor design pattern is a way of separating an algorithm from an object structure it operates on.
C'est ce qu'il me semblait comprendre en lisant le wikipedia.
Sinon, qu'est-ce qu'un visiteur?
Salut,
Les deux patterns ont des objectifs différents.
Le visiteur permet de parcourir une série d'éléments et d'invoquer, pour chacun, des comportements déterminés.
Le décorateur permet quant à lui de rajouter des comportements à un objet![]()
A méditer: La solution la plus simple est toujours la moins compliquée
Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
Compiler Gcc sous windows avec MinGW
Coder efficacement en C++ : dans les bacs le 17 février 2014
mon tout nouveau blog
j'ai essayé de codé moi-même un pattern visiteur:
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 class Visiteur; class Visite{ private: int o; public: Visite(int u):o(u){} void fixe(int x){ o=x; } void accepte(Visiteur* visiteur){ visiteur->visite(this); } }; class Visiteur{ private: int j; public: Visiteur(int u):j(u){} void visite(Visite *visite){ visite->fixe(j); } }; int main(){ Visiteur visteur(4); Visite visite(3); visite.accepte(&visteur); }
Je ne sais pas si cela peut-être considéré comme un pattern visiteur, mais je ne comprends pas pourquoi le compilateur me renvoie comme erreur:
error C2027: use of undefined type 'Visiteur'
alors que j'ai bien utilisé une déclaration anticipée de la classe visiteur.
merci
Quand tu fais:
T'as besoin de connaitre le type. La déclaration anticipée marche pas.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 visiteur->visite(this);
c'est parce que tu dois attendre que la classe visiteur soit définie avant de définir la fonction accepte (vu que tu tente d'accéder à une fonction membre de visiteur)
De plus, le pattern visiteur est particulièrement intéressant quand tu te trouve face à une hiérarchie polymorphe, afin de t'assurer que le comportement adapté est bel et bien invoqué.
Il n'a que peu d'intérêt si c'est pour invoquer des comportements non polymorphes (car on estime que la fonction que l'on voudra appeler fait partie... de l'interface publique de l'objet)
A méditer: La solution la plus simple est toujours la moins compliquée
Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
Compiler Gcc sous windows avec MinGW
Coder efficacement en C++ : dans les bacs le 17 février 2014
mon tout nouveau blog
Partager