【python设计模式】python设计模式之工厂模式

本质:根据传入参数的不同,返回对应的不同对象(类似鸡生蛋),方便造对象,但不做任何动作。

工厂模式的目的是为了解耦:

1.把对象的创建和使用的过程分开。就是Class A 想调用 Class B ,那么A只是调用B的方法,而至于B的实例化,就交给工厂类

2.工厂模式可以降低代码重复。如果创建对象B的过程都很复杂,需要一定的代码量,而且很多地方都要用到,那么就会有很多的重复代码。我们可以这些创建对象B的代码放到工厂里统一管理。既减少了重复代码,也方便以后对B的创建过程的修改维护。

举个简单的例子,根据传入不同的环境参数,返回不同环境的测试数据:

# 思想:通过函数的方式,传不同参数来生成不同的对象
class ReturnTestEnvData:
    def __init__(self):
        self.data = "这里返回test环境的测试数据"

    def getData(self):
        return self.data


class ReturnStgEnvData:
    def __init__(self):
        self.data = "这里返回stg环境的测试数据"

    def getData(self):
        return self.data


def cook_factory(env):
    if env == "test":
        food = ReturnTestEnvData
    elif env == "stg":
        food = ReturnStgEnvData
    else:
        raise ValueError("请出入正确的环境: {}".format(env))
    return food()


if __name__ == "__main__":
    test = cook_factory("test")
    stg = cook_factory("stg")

    data_test = test.getData()  # 返回String类型数据
    data_stg = stg.getData()  # 返回int类型数据
    # getData()返回不同类型的数据, 这在实际开发中是很常见的

    print(data_test)  # => 返回test环境的测试数据
    print(data_stg)  # => 返回stg环境的测试数据

ps:与多态的区别:

多态会调用实例的方法;

工厂模式只会返回实例,不会调用方法

你可能感兴趣的:(设计模式,python)