首页
学习
活动
专区
圈层
工具
发布

Python设计模式(1):简单工厂方法模式

简单工厂方法模式(the Simple Factory Method Pattern)的设计类图如图所示。图中的Creator类是一个工厂类。根据“四人帮”(Gang of Four,GOF)的软件设计模式的记号,图中的右半部分类叫做产品类,由接口Product与具体的实现类产品类ConcreteProduct组成。

产品类实际上代表被创建的类的结构,而Creator类是简单工厂方法模式的核心部分。Creator类是简单工厂方法的核心部分。Creator类拥有一个方法factory(),即工厂方法,该方法负责创建产品类对象。简单工厂方法模式的特点是仅仅有一个具体的(Concrete)创建者类,并且在此类中包含一个静态工厂方法factory()。

简单工厂方法模式所包含的各组成部分意义如下。

  1. Creator:是简单工厂方法模式的核心,包含应用程序所需要的业务逻辑,当客户类Client需要的时候,委托工厂类创建产品类的对象。
  2. Product:可以是接口或者抽象类,是具体子类的超类或者共同接口。
  3. ConcreteProduct:实现Product接口,或者继承抽象类Product。
代码语言:javascript
复制
from abc import ABC, abstractmethod


class Creator:
    @staticmethod
    def get_product(option):
        product = None
        if option == 1:
            product = ConcreteProduct1()
        elif option == 2:
            product = ConcreteProduct2()
        return product


class Product(ABC):
    @abstractmethod
    def get_product_info(self):
        raise NotImplementedError


class ConcreteProduct1(Product):
    def get_product_info(self):
        return'ConcreteProduct1'


class ConcreteProduct2(Product):
    def get_product_info(self):
        return'ConcreteProduct2'


class Client:
    @staticmethod
    def main():
        print('Product types:ConcreteProduct1(1),ConcreteProduct2(2)')
        option0 = int(input('Please select:'))
        print(Creator.get_product(option0).get_product_info())


if __name__ == '__main__':
    Client.main()

简单工厂方法模式的优点如下:

  1. 工厂方法包含从一个类的结构中选择初始类的业务逻辑。
  2. 客户类不直接创建产品类的对象,客户类只作为对象的消费者。
  3. 简单工厂方法模式实现了责任分离。
  4. 客户类不负有创建类的对象的责任,因此如果有新产品子类加入,不必修改已有的客户类代码(前提是客户类暂时不需要使用新的产品子类对象)。
  5. 因为工厂类中包含了对象生成的必要的逻辑判断,根据客户端的选择条件动态实例化相关的类,所以客户端类中没有创建对象所需要的条件语句。

简单工厂方法模式的缺点如下:

  1. 由于工厂类必须知道怎样创建每个子类的对象,所以每当增加产品类的时候,都需要修改工厂类代码。简单工厂方法模式不符合开闭原则。
  2. 简单工厂类只能是一个单独的类,而不能成为一个层次的类。
下一篇
举报
领券