Bonjour,
Je voudrais faire une classe dont les données internes (et privées) serait modifiable suivant différentes stratégie (c'est d'ailleurs le nom du design Pattern)
Existe t'il une conception élegante pour ne pas utiliser friend ?
Voila ce à quoi j'avais pensé avec friend:
Code :
- class Object
- {
- friend IStrategie;
- int _data1;
- double _data2;
- //...
- IStrategy *_strategy;
- void execute(){_strategy->execute(*this);}
- };
- class IStrategy
- {
- public:
- void execute(Object & obj)=0;
- };
- class Strategy1 : public IStrategy
- {
- public:
- void execute(Object & obj){obj._data1 = 2; /*ou tout autre valeur suivant algo*/}
- };
- class Strategy2 : public IStrategy
- {
- public:
- void execute(Object & obj){obj._data2 = 1.23; /*ou tout autre valeur suivant algo*/}
- };
|
Probleme : this (et donc *this) est const et donc je ne peux pas le modifier ? faire un const_cast ??
Je dois déclare comme friend, IStrategy mais aussi Strategy1, Strategy2, ... et ce n'est pas l'idéal car je ne connais pas encore toute mes strategies...
Passer la/les valeurs modifier en retour/paramètres n'est pas envisageable non plus (je ne connais pas exactement le nombre de paramètres, ce n'est pas les mêmes utilisés par chaque stratégie...
Des solutions ? Des idées ?