Sto cercando un modello di progettazione per risolvere il seguente problema:
Un oggetto (diciamo che rappresenta un documento) può cambiarne il tipo in modo dinamico durante la sua durata (ad es. quando viene salvato con una diversa estensione di file).
L'oggetto contiene molti metodi virtuali in modo che, a seconda del tipo di oggetto, può comportarsi in modi diversi (ad esempio l'evidenziazione della sintassi diversa).
L'applicazione contiene molti riferimenti all'oggetto, che non dovrebbero diventare non validi quando il tipo dell'oggetto cambia. Quindi non lo farà per distruggere l'oggetto e crearne uno nuovo del nuovo tipo.
Una soluzione "ovvia" è usare la composizione, in modo che l'oggetto visto dall'applicazione (l'oggetto esterno) non cambi mai, ma inoltra tutte le chiamate a un oggetto contenuto che può essere distrutto e ricreato ogni volta che il tipo cambia.
Ma questo richiede un metodo nell'oggetto esterno per ogni metodo virtuale nell'oggetto contenuto per inoltrare la chiamata.
Esiste un modello di progettazione che evita questa necessità di metodi di inoltro?
(Idealmente mi piacerebbe uno schema che non richieda la lingua per supportare le interfacce.)
Aggiorna
Grazie ai commenti riportati di seguito, ho identificato che il pattern di progettazione State implementa ciò che voglio, tranne che richiede l'inoltro esplicito di ogni metodo dalla classe wrapper alla classe wrapee.
Quindi un altro (forse più chiaro?) modo di affermare la mia domanda originale è questo: esiste un modello di progettazione alternativo che implementa la funzionalità del modello di stato in (praticamente) qualsiasi linguaggio orientato agli oggetti senza dover esplicitamente inoltrare ogni metodo?
('No' è una risposta perfettamente valida a patto che tu possa giustificarlo.)