Sono nuovo di OOP e modello di progettazione.
Ho una semplice app che gestisce la generazione di tabelle, colonne (che appartengono alla tabella), righe (che appartengono alla tabella e hanno colonne) e valori (che appartengono alle righe). Ciascuno di questi oggetti può avere una collezione di proprietà, che a sua volta è definita come enum.
Sono tutte interfacce: ho usato le fabbriche per ottenere esempi concreti di questi prodotti, a seconda delle circostanze.
Ora sto affrontando il problema di estendere queste classi. Diciamo che ho bisogno di un altro prodotto chiamato "SpecialTable" che a sua volta ha alcune proprietà speciali o nuovi metodi come "getSomethingSpecial" o un set esteso di proprietà. L'unico modo è estendere / specializzare tutti i miei elementi (ad esempio, costruire una SpecialTableFactory, un'interfaccia SpecialTable e un calcestruzzo SpecialTableImpl)? Che cosa fare se, diciamo, ho intenzione di utilizzare metodi standard come addRow (colonna colonna, nome stringa) che non ha bisogno di essere specializzato?
Non mi piace l'idea di ereditare fabbriche e interfacce, ma dal momento che SpecialTable ha più metodi di Table, credo che non possa condividere la stessa fabbrica. Mi sbaglio?
Un'altra domanda: se devo definire le proprietà del prodotto in fase di esecuzione (una tabella che è stata aggiornata a SpecialTable in fase di runtime), credo che dovrei usare un decoratore. È possibile (e in che modo) combinare la progettazione di fabbrica e decoratore? È preferibile utilizzare un modello di stato o di strategia, invece?