您的位置:首页 > 编程语言 > Python开发

一种工厂模式的实现:python

2014-11-26 11:21 483 查看
一、基本工厂模式
工厂模式最简单的实现是这样的:





python代码实现:
class Operation:
def GetResult(self):
pass

class OperationAdd(Operation):
def GetResult(self):
return self.op1 + self.op2

class OperationSub(Operation):
def GetResult(self):
return self.op1 - self.op2

class OperationMul(Operation):
def GetResult(self):
return self.op1 * self.op2

class OperationDiv(Operation):
def GetResult(self):
try:
result = self.op1 / self.op2
return result
except:
print 'error while divide by zero'
return 0

class OperationUndef(Operation):
def GetResult(self):
print 'Undefine operation.'
return 0

class OperationFactory():
operation = {}
operation['+'] = OperationAdd()
operation['-'] = OperationSub()
operation['*'] = OperationMul()
operation['/'] = OperationDiv()

def createOperation(self, ch):
if ch in self.operation:
op = self.operation[ch]
else:
op = OperationUndef()
return op

if __name__ == '__main__':
op = '+'
opa = 12
opb = 21
factory = OperationFactory()
ca1 = factory.createOperation(op)
ca1.op1 = opa
ca1.op2 = opb
print ca1.GetResult()


二、另外一种形式的工厂模式
代码结构





所有的类和方法定义在Classes Set中的py文件中,中间使用的方法central_call集中整合这些类的方法,一共外层调用者使用。
通过下面的代码会更容易理解它:
类定义:operation.py
class Operators(object):
def __init__(self):
pass

def add(self, op1, op2, status=None):
return op1 + op2

def sub(self, op1, op2, status=None):
return op1 - op2


CentralCall: centralCall.py
from operation import Operators

operators = Operators()

def centralCall(cf, func, *args):
status = []
ret = getattr(globals()[cf], func)(*args, status=status)
if status:
print status
return ret


外部调用:test.py
from CentralCall import centralCall

op1 = 5
op2 = 10
op3 = 0
ret = centralCall('operators', 'add', op1, op2)
print ret


三、总结
这类工厂模式主要是利用了python内建的getattr方法来调用各个类的方法,在实际应用中还是比较实用的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: