Salut,
Je suis de l'avis de Loïc...
De prime abord, j'aurais tendance à dire qu'il y a peu de chances que tu veuilles manipuler des collections de traitement audio et video mélangés et des collections de configurations audio et video mélangées.
En effet, il y a de fortes chances que le traitement audio soit pris en charge d'un coté tout à fait différent de l'endroit où le traitement video sera pris en charge.
Au pire, tu regroupera les objets responsables de ces deux traitements dans une structure ad-hoc, et, si une fonction doit lancer un traitement video et un traitement audio simultanés, il "suffira" d'appeler les deux successivement
Si
vraiment tu veux pouvoir gérer des collections de traitements ou de configurations confondues, tu devrais envisager un pattern "visiteur", avec un petit coup de NVI le traitement étant le visiteur, la configuration étant la visitée.
Cela pourrait prendre une forme proche de
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 38 39 40 41 42 43 44 45 46 47 48 49 50 51
| class Configuration
{
public:
bool accept(Traitement* tr){return doAccept(*tr);}
private:
/* par défaut, on renvoie false, pour n'avoir que les traitement ad-hocs
* à réimplémenter et à gérer
*/
virtual bool doAccept(TraitementVideo & ){return false;}
virtual bool doAccept(TraitementAudio &){return false;}
};
class ConfigurationVideo : public Configuration
{
private:
virtual bool doAccept(TraitementVideo & tr){ tr.visit(*this);}
};
class ConfigurationAudio : public Configuration
{
private:
virtual bool doAccept(TraitementAudio & tr){ tr.visit(*this);}
};
class Traitement
{
/* même pas besoin de déclarer visit ici : chaque classe de configuration
* qui va appeler la fonction le fera sur une classe particulière :D
*/
};
class TraitementVideo : public Traitement
{
public:
/* visit n'a même pas besoin d'être virtuelle :D
*/
bool visit(ConfigurationVideo /* const */ & conf)
{
/*...*/
}
};
class TraitementAudio : public Traitement
{
public:
/* visit n'a même pas besoin d'être virtuelle :D
*/
bool visit(ConfigurationAudio /* const */ & conf)
{
/*...*/
}
}; |
Partager