Ho un contesto di classe, che contiene un'istanza di uno stato di classe astratto, che ha più sottoclassi concrete (questa è un'implementazione del modello di stato).
Ciascuna sottoclasse di stati esegue un numero di algoritmi, che sono essi stessi classi, e in base al risultato di un algoritmo lo stato nella classe Context potrebbe cambiare.
La mia domanda è: in che modo l'algoritmo dovrebbe apportare questo cambiamento di stato nella classe Context?
1) Una soluzione semplice sarebbe quella di passare l'oggetto Context all'algoritmo, ma non mi piace che l'algoritmo conosca qualcosa sullo stato / contesto corrente.
2) Potrei scrivere classi wrapper specifiche dell'algoritmo della classe Context, in cui ogni wrapper ha una sola funzione pubblica, ovvero impostare lo stato del contesto in base al risultato dell'algoritmo.
3) Passa una funzione di Context che fa cambiare uno stato specifico come puntatore di funzione all'algoritmo ed eseguirlo quando lo stato di Context deve essere modificato.
Mentre 1) è secondo me l'opzione meno favorevole, 2) introdurrebbe un sacco di nuove classi e non sono sicuro di quanto 3) sia fattibile (in C ++) e di quanto sia orientato agli oggetti.
Qual è il modo in cui i libri di testo affrontano questa situazione?