Ho una classe che rappresenta lo stato della mia applicazione e voglio creare molti comandi per aggiornare questo stato.
class State{
private:
list<int> intList;
...
}
class ICommand {
public:
virtual ~ICommand(){}
virtual void execute(State* state) = 0;
}
Le implementazioni di ICommand
specificheranno come aggiornare state
, quindi dovrebbero interagire con i suoi campi privati.
Il mio problema è : qual è l'approccio migliore in C ++ per consentire ai comandi di aggiornare il campo privato di State
?
Se espongo intList
con un getter pubblico, non posso garantire che solo i comandi aggiornino lo stato.
Se dovessi usare class friendship
devo collegare State
con l'implementazione del comando perché collegarlo all'interfaccia non funziona e non mi sembra così bello ...
Il mio dubbio sull'amicizia è infondato? Dovrei scegliere un approccio diverso?