The title says it all. I'm trying to build a calculator application (for self-learning purposes). The application is going to have a very common UI, with plus(+), minus(-), multiply(*) and a divide(/) button. Also, the app can do, real-number as well as complex-number calculations.
So, the situation here is, depending upon the mode(normal or complex), the same button should perform different calculation ? Which pattern should I be using for this situation ? I feel, strategy pattern should be a good fit, but then, I don't exactly know how to implement that - I mean, I'm just not sure about how to design my classes, what to have as Interfaces, and what as delegates.
CURRENTLY, MY 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 {} - Interface names starts with I
- All others are concrete classes
BUT IT'S A MESS. And, I'm totally lost within my own classes, and interfaces.
PS: Of course, I can do this using if/else, but that's not what I want to do. Not because I forcefully want to use a pattern, but because, those if-else will be scattered everywhere in the program for eg. ReadInput, PlusButtonClick, MinusButtonClick, etc. And, as I understand, design patterns are supposed to avoid these kind of situations of code-repetitions, by clever/tricky re-organization of the existing code.
PPS: Sorry for being too verbose.
ICalculateand just have aCalculate()method.IOperationandDo()seem awkward.