Quelqu'un peut-il me donner un exemple du Décorateur en C++ ?
J'ai trouver la version de Java, mais il lui est difficile de comprendre la version C++ (à partir des exemples que j'ai trouvé).
Vince Huston des Modèles de Conception, même si sa présentation est mauvaise, il a le C++ mise en œuvre pour la plupart des modèles de conception dans la "bande des Quatre" livre.
Il n'y a pas beaucoup de différence avec Java, à l'exception du manuel de gestion de la mémoire que vous feriez mieux de les envelopper avec des pointeurs intelligents 🙂
+1 pour ce site.Je me réfère toujours à ce pour la mise en œuvre du rpc.Je pense aussi que le désordre de gestion de la mémoire est la raison pour laquelle vous ne voyez pas ce modèle beaucoup en rpc. Je n'ai pas toujours se référer à la mise en œuvre, mais j'apprécie de ne pas être spammé par les annonces et les avis sur quand la, quand ne pas le faire et ce qu'il apporte par rapport à d'autres modèles liés.
+1 pour la grande réponse. J'ai vérifié le deuxième exemple, la condition (sourcemaking.com/design_patterns/decorator/cpp/2) - n'est-ce pas, il manque un destructeur virtuel dans l'interface de la classe (la classe Widget) ? merci. Vous avez raison, la classe de base(es) doivent avoir les destructeurs virtuels en tant que général de la "bonne pratique". Cependant, dans cet exemple, le code fonctionne bien car a) ils ne sont pas la suppression de tous les objets au moyen d'une base de pointeur de classe (ils ne sont pas les supprimer?!?!? Ils sont tout simplement rentrer / sortir, type de sloppy...) et b) les constructeurs des objets dérivés de ne pas allouer de ressources / d'ouvrir les fichiers / etc., donc, techniquement, ne pas appeler leurs destructeurs ne cause pas de problèmes... aujourd'HUI. Mais vous avez raison-que le code se développe, cela pourrait changer. Bonne prise!
#include<iostream>usingnamespace std;classComputer{public:virtualvoid display(){
cout <<"I am a computer..."<< endl;}};classCDDrive:publicComputer{private:Computer* c;public:CDDrive(Computer* _c){
c = _c;}void display(){
c->display();
cout <<"with a CD Drive..."<< endl;}};classPrinter:publicComputer{private:CDDrive* d;public:Printer(CDDrive* _d){
d = _d;}void display(){
d->display();
cout <<"with a printer..."<< endl;}};int main(){Computer* c =newComputer();CDDrive* d =newCDDrive(c);Printer* p =newPrinter(d);
p->display();}
c'est une bonne solution à un autre problème, mais ce n'est pas "vraiment" pattern décorateur, cette conception est manquant le décorateur classe qui est hérité par un décorateur, dans ce cas, l'imprimante et le lecteur de CD-rom
Vince Huston des Modèles de Conception, même si sa présentation est mauvaise, il a le C++ mise en œuvre pour la plupart des modèles de conception dans la "bande des Quatre" livre.
Cliquez pour Décorateur.
Il n'y a pas beaucoup de différence avec Java, à l'exception du manuel de gestion de la mémoire que vous feriez mieux de les envelopper avec des pointeurs intelligents 🙂
Je n'ai pas toujours se référer à la mise en œuvre, mais j'apprécie de ne pas être spammé par les annonces et les avis sur quand la, quand ne pas le faire et ce qu'il apporte par rapport à d'autres modèles liés.
OriginalL'auteur Matthieu M.
J'ai trouvé le site Sourcemaking à être assez bon quand il s'agit de expliquer les différents Modèles de Conception.
La Décorateur modèle de conception a C++ exemples, comme un vue d'ensemble exemple, un "avant et après", et un exemple avec le paquet de codage/décodage.
merci. Vous avez raison, la classe de base(es) doivent avoir les destructeurs virtuels en tant que général de la "bonne pratique". Cependant, dans cet exemple, le code fonctionne bien car a) ils ne sont pas la suppression de tous les objets au moyen d'une base de pointeur de classe (ils ne sont pas les supprimer?!?!? Ils sont tout simplement rentrer / sortir, type de sloppy...) et b) les constructeurs des objets dérivés de ne pas allouer de ressources / d'ouvrir les fichiers / etc., donc, techniquement, ne pas appeler leurs destructeurs ne cause pas de problèmes... aujourd'HUI. Mais vous avez raison-que le code se développe, cela pourrait changer. Bonne prise!
OriginalL'auteur Dan
OriginalL'auteur Rajeev