Il titolo dice tutto. Sto provando a costruire un'applicazione per calcolatrice (per scopi di autoapprendimento). L'applicazione avrà un'interfaccia utente molto comune, con più (+), meno (-), moltiplicato (*) e un pulsante dividi (/). Inoltre, l'app può eseguire calcoli con numeri reali e numeri complessi.
Quindi, la situazione qui è, a seconda della modalità (normale o complessa), lo stesso pulsante dovrebbe eseguire calcoli diversi? Quale modello dovrei usare per questa situazione? Sento che lo schema della strategia dovrebbe essere una buona idea, ma poi, non so esattamente come implementarlo - voglio dire, non sono sicuro di come progettare le mie classi, cosa avere come interfacce e cosa delegati.
ATTUALMENTE, IL MIO DESIGN CONTAINS
IOperation
{
Do();
}
Add:IOperation{}
Subtract:IOperation{}
Multiply:IOperation{}
Divide:IOperation{}
Root:IOperation{} //not supported by ComplexNumber
ISupportedOperation
{
IList<IOperation> SupportedOps {get;}
}
INumber : ISupportedOperation {}
RealNumber:INumber{}
ComplexNumber : INumber {}
- I nomi dell'interfaccia iniziano con I
- Tutti gli altri sono classi concrete
MA È UN MESS. E, sono totalmente perso nelle mie classi e interfacce.
PS: Certo, posso farlo usando if / else, ma non è quello che voglio fare. Non perché io voglia forzatamente usare un modello, ma perché, quelli if-else saranno sparsi ovunque nel programma per es. ReadInput, PlusButtonClick, MinusButtonClick, ecc. E, come ho capito, i pattern di progettazione dovrebbero evitare questo tipo di situazioni di ripetizioni del codice, mediante una riorganizzazione intelligente / complicata del codice esistente.
PPS: mi spiace essere troppo prolisso.