questa domanda riguarda in realtà un complesso progetto Java che sto facendo all'università, ma è possibile trovare un caso semplice che sia davvero simile al problema che sto affrontando.
In questo scenario, abbiamo un'app con versione gratuita e versione premium. Un utente registra l'app per la prima volta e utilizza la versione gratuita per impostazione predefinita. Se vuole farlo, può pagare e diventare un utente premium. Voglio sottolineare il fatto che la versione premium "non dura per sempre", quindi è possibile che ritorni al suo stato di utente libero. (questo può sembrare strano, ma è dovuto al fatto che questo non è veramente il mio caso di studio).
È anche importante notare che ci sono alcune caratteristiche / azioni che sono comuni sia all'utente libero che a quello premium, ma ce ne sono alcune che non possono essere condivise. Ad esempio, un utente premium non può avere un metodo da pagare per diventare un utente premium (che è invece disponibile per l'utente gratuito).
La prima cosa che mi è venuta in mente era l'ereditarietà, dal momento che gli utenti liberi e premium erano utenti, ma come ottenere che lo stesso utente potesse passare da questi due ruoli?
Poi ho pensato all'uso del Pattern di stato , ma c'è ancora qualcosa che non mi sembra giusto . Se ho capito bene, dovrei dichiarare tutti i metodi (non solo quelli "condivisi", ma anche i metodi che riguardano solo l'utente libero o l'utente premium) nell'interfaccia, e quindi generare eccezioni se è stata effettuata una chiamata illegale (come ho detto prima, se un utente premium ha provato a pagare la versione premum). Ma almeno questa soluzione consente un facile passaggio tra i due ruoli.
Mi sembra che questo sia un problema abbastanza comune al giorno d'oggi, ma non ho trovato nulla di rilevante e abbastanza buono su Internet.