python版本工厂方法

工厂方法也叫虚构造器,它是一个方法,对不同的输入参数返回不同的对象。工厂方法将具体的实例化延迟到子类中实现,把选择判断逻辑交给客户端,让客户端来实现实例化

# -*- coding:UTF-8 -*-
from abc import ABCMeta, abstractmethod


class Operation(metaclass=ABCMeta):
    def __init__(self):
        self.numberA = 0.0
        self.numberB = 0.0

    @abstractmethod
    def get_result(self):
        pass


class OperationAdd(Operation):
    def get_result(self):
        return self.numberA + self.numberB


class OperationMul(Operation):
    def get_result(self):
        return self.numberA * self.numberB


class OperationSub(Operation):
    def get_result(self):
        return self.numberA - self.numberB


class OperationDiv(Operation):
    def get_result(self):
        return self.numberA / self.numberB


class IFactory(metaclass=ABCMeta):
    @abstractmethod
    def create_operation(self):
        pass


class AddFactory(IFactory):
    def create_operation(self):
        return OperationAdd()


class SubFactory(IFactory):
    def create_operation(self):
        return OperationSub()


class MulFactory(IFactory):
    def create_operation(self):
        return OperationMul()


class DivFactory(IFactory):
    def create_operation(self):
        return OperationDiv()


if __name__ == "__main__":
    operFactory = AddFactory()
    oper = operFactory.create_operation()
    oper.numberA = 1
    oper.numberB = 2
    print(oper.get_result())

 增加一个乘方就变得很简单了:

class OperationPower(Operation):
    def get_result(self):
        return math.pow(self.numberA, self.numberB)


class PowerFactory(IFactory):
    def create_operation(self):
        return OperationPower()


if __name__ == "__main__":
    operFactory = PowerFactory()
    oper = operFactory.create_operation()
    oper.numberA = 2
    oper.numberB = 3
    print(oper.get_result())

 

posted @ 2018-01-25 16:13  gjw  阅读(117)  评论(0)    收藏  举报