大話デザインモデルのPython実現【簡易工場モデル】


# coding=utf8

__author__ = 'smilezjw'

class Operation(object):
    def __init__(self):
        self._numberA = 0
        self._numberB = 0

    def get_result(self):
        pass


class OperationAdd(Operation):
    def get_result(self):
        return self._numberA + self._numberB


class OperationSub(Operation):
    def get_result(self):
        return self._numberA - self._numberB


class OperationMul(Operation):
    def get_result(self):
        return self._numberA * self._numberB


class OperationDiv(Operation):
    def get_result(self):
        try:
            return self._numberA / self._numberB
        except ZeroDivisionError:
            print 'Divide by zero!'
            return 0


class OperationFactory(object):
    def createOperation(self, op):
        if op == '+':
            operation = OperationAdd()
        elif op == '-':
            operation = OperationSub()
        elif op == '*':
            operation = OperationMul()
        elif op == '/':
            operation = OperationDiv()
        else:
            print 'Invalid operator!'
            return None
        return operation


if __name__ == '__main__':
    op = raw_input('operator: ')
    numA = input('first number: ')
    numB = input('second number: ')
    factory = OperationFactory()
    operation = factory.createOperation(op)
    operation._numberA = numA
    operation._numberB = numB
    print operation.get_result()

モードフィーチャー:条件に応じて異なる機能を個別のファクトリクラスで生成するクラスの例.