原廠模式的核心:
有這樣一群類,他們區別很小,就像運算子類,他們的區別僅僅就是不同的運算子號。這樣我們可以建一個工廠,按需“生產”出所需的所需要的類的執行個體。
#encoding=utf-8##by panda#簡單原廠模式class OperateBase(): result = 0; def GetResult(self): return self.result;class OperationAdd(OperateBase): def __init__(self, NumA, NumB): self.result = NumA + NumB; def GetResult(self): return self.result; class OperationSub(OperateBase): def __init__(self, NumA, NumB): self.result = NumA - NumB; def GetResult(self): return self.result; class OperationMult(OperateBase): def __init__(self, NumA, NumB): self.result = NumA * NumB; def GetResult(self): return self.result; class OperationDiv(OperateBase): def __init__(self, NumA, NumB): self.result = NumA / NumB; def GetResult(self): return self.result; class OperationFactory(): @staticmethod def createOperate(operate, NumA, NumB): optList = { '+':OperationAdd, '-':OperationSub, '*':OperationMult, '/':OperationDiv, } oper = OperateBase() if(optList.has_key(operate)): oper = optList[operate](NumA, NumB); return operdef clientUI(): opt = raw_input("please input a operation(+-*/): "); NumA = raw_input("please input the first number: "); NumB = raw_input("please input the second number: "); oper = OperationFactory.createOperate(opt, float(NumA), float(NumB)) print "Restlt: ", oper.GetResult() returnif __name__ == '__main__': clientUI();
UML類圖如下: