一种工厂模式的实现:python

一、基本工厂模式

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


  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方法来调用各个类的方法,在实际应用中还是比较实用的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值