一种工厂模式的实现:python

一、基本工厂模式

  工厂模式最简单的实现是这样的:

一种工厂模式的实现:python_第1张图片

  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()


二、另外一种形式的工厂模式
  代码结构
一种工厂模式的实现:python_第2张图片
  所有的类和方法定义在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方法来调用各个类的方法,在实际应用中还是比较实用的。

你可能感兴趣的:(python)