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 CONTAINSIOperation{  Do();}Add:IOperation{}Subtract:IOperation{}Multiply:IOperation{}Divide:IOperation{}Root:IOperation{} //not supported by ComplexNumberISupportedOperation {    IList<IOperation> SupportedOps {get;}}INumber : ISupportedOperation {}RealNumber:INumber{}ComplexNumber : INumber {}Interface names starts with IAll others are concrete classesBUT 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. 
which pattern is most intuitive for a calculator app?
c#;design patterns;architecture