Learn a simple factory with an example of a calculator
1. Operation Operation Class
Public classoperation{Private Double_numbera=0; Private Double_numberb=0; Public DoubleNumbera {Get{return_numbera}Set{_numbera=value;} } Public DoubleNumberb {Get{return_numberb}Set{_numberb=value;} } Public Virtual DoubleGetResult () //virtual method, convenient subclass rewrite {Doubleresult=0; returnresult; }}
2, Subtraction class
classOpertionadd:operation//Addition Class{ Public Override DoubleGetResult () {Doubleresult=0; Result=numbera+Numberb; returnresult; }}classOpertionsub:operation//Subtraction Class{ Public Override DoubleGetResult () {Doubleresult=0; Result=numbera-Numberb; returnresult; }}classOpertionmul:operation//Multiplication Class{ Public Override DoubleGetResult () {Doubleresult=0; Result=numbera*Numberb; returnresult; }}classOpertiondiv:operation//Division class{ Public Override DoubleGetResult () {Doubleresult=0; if(numberb==0) { Throw NewException ("the divisor cannot be 0"); } result=numbera/Numberb; returnresult; }}
3, simple Operation factory class
Public classoperationfactory{ Public StaticOperation Createoperate (stringoperate) {Operation Oper=NULL; Switch(operate) { Case "+": Oper=NewOperationadd (); Break; Case "-": Oper=Newoperationsub (); Break; Case "*": Oper=NewOperationmul (); Break; Case "/": Oper=NewOperationdiv (); Break; } }}
4. Client code
Operation Oper;oper=operationfactory.createoperate ("+"); Oper. Numbera=1; oper. Numberb=2; Double Result=oper. GetResult ();
Simple Factory mode