python抽象工厂模式

1. 什么是抽象工厂模式

抽象工厂模式是一种创建型设计模式,该模式提供一个接口,用于创建家族相关或依赖对象的工厂,而无需明确指定它们的类。即抽象工厂是针对一类产品族,而不是针对某一类产品。

2. 抽象工厂模式的结构

抽象工厂模式包含以下几个角色:

2.1. 抽象工厂(AbstractFactory)

提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。

2.2. 具体工厂(ConcreteFactory)

实现抽象工厂接口,具体工厂负责创建一组具有相同主题的产品。

2.3. 抽象产品(AbstractProduct)

为一类产品对象声明接口,通常是由抽象类或接口来实现。

2.4. 具体产品(ConcreteProduct)

定义一个将被具体工厂创建的产品对象。它实现了抽象产品接口。

下面是抽象工厂模式的结构图:

from abc import ABC, abstractmethod

class AbstractFactory(ABC):

@abstractmethod

def create_product_a(self):

pass

@abstractmethod

def create_product_b(self):

pass

class ConcreteFactory1(AbstractFactory):

def create_product_a(self):

return ConcreteProductA1()

def create_product_b(self):

return ConcreteProductB1()

class ConcreteFactory2(AbstractFactory):

def create_product_a(self):

return ConcreteProductA2()

def create_product_b(self):

return ConcreteProductB2()

class AbstractProductA(ABC):

@abstractmethod

def product_a_method(self):

pass

class ConcreteProductA1(AbstractProductA):

def product_a_method(self):

return "Product A1 method called"

class ConcreteProductA2(AbstractProductA):

def product_a_method(self):

return "Product A2 method called"

class AbstractProductB(ABC):

@abstractmethod

def product_b_method(self):

pass

class ConcreteProductB1(AbstractProductB):

def product_b_method(self):

return "Product B1 method called"

class ConcreteProductB2(AbstractProductB):

def product_b_method(self):

return "Product B2 method called"

3. 抽象工厂模式的应用场景

抽象工厂模式主要解决接口选择的问题,当一个类不知道它所必须创建的对象的类时,它可以使用工厂方法来代替直接创建对象。工厂方法让子类决定该创建什么对象。通常在以下情况下使用抽象工厂模式:

3.1. 系统的产品有多个系列

例如电子产品中的笔记本电脑和手机这两类产品,都有不同的系列,可以采用抽象工厂模式来生产这些系列产品。

3.2. 不希望客户端与工厂和产品的实现类耦合

当添加新产品时,客户端代码不需要进行修改,只需要添加产品工厂的实现类。

4. 抽象工厂模式的优缺点

4.1. 优点:

抽象工厂将客户端与类的实现分离开来,客户端通过它们的抽象接口操纵实际的具体实现类,使客户端代码从具体实现类中解耦。

给客户端提供了一些列的产品,让客户端能够选择他们需要的产品,而无需关心产品是如何实现的。

当增加一个新产品族时,无需修改代码,只需要增加一个具体工厂即可。

4.2. 缺点:

增加产品族变得困难。

当新增一个产品时,需要修改所有的具体工厂。

5. 抽象工厂模式 VS 工厂方法模式

很多人会把抽象工厂模式和工厂方法模式混淆,它们确实非常相似。它们都是为了解决对象创建问题的,但是它们之间还是有以下的区别:

工厂方法模式针对单一产品(即具体的抽象产品类),而抽象工厂模式针对的是一类产品(即抽象的产品类)。

工厂方法模式只需要一个工厂类,而抽象工厂模式需要多个工厂类。

工厂方法模式通过子类化实现工厂,而抽象工厂模式则是使用一个工厂类来创建相关产品的系列。

6. 结语

抽象工厂模式是一种非常优秀的创建型设计模式,用于创建一系列相关或相互依赖的对象。客户端使用抽象接口而不是具体类来操纵实际的具体实现类,从而减少了客户端与实现类之间的耦合。但是,在实际使用中需要考虑新增产品族变得困难的问题,还需要指出的是抽象工厂模式不适合日常开发中的所有场景,需要在具体的场景下进行权衡。

后端开发标签