工厂方法模式是一种创建型设计模式,其核心在于定义一个用于创建对象的接口,并允许子类决定实例化的类。这种模式使一个类的实例化延迟到其子类中,从而实现解耦。

核心概念

在工厂方法模式中,包含以下角色:

  • 抽象工厂(Abstract Factory):定义了创建对象的基本接口,用于创建产品对象。
  • 具体工厂(Concrete Factory):实现了在抽象工厂中声明的方法,用于创建实际的对象。
  • 产品(Product):一个抽象产品类,声明了具体产品的公共接口。
  • 具体产品(Concrete Product):实现了抽象产品接口,定义了创建的具体产品。

实现步骤

  1. 定义抽象工厂接口:声明创建产品对象的工厂方法。
  2. 实现具体工厂类:实现抽象工厂接口,并创建具体产品对象。
  3. 创建产品类:实现抽象产品接口,定义具体产品的行为。
  4. 客户端代码:创建具体工厂的实例,并调用工厂方法来获取产品对象。

代码示例

以下是一个简单的工厂方法模式的代码示例:

from abc import ABC, abstractmethod

# 抽象产品
class Product(ABC):
    @abstractmethod
    def operation(self):
        pass

# 具体产品 A
class ConcreteProductA(Product):
    def operation(self):
        return "操作 A"

# 具体产品 B
class ConcreteProductB(Product):
    def operation(self):
        return "操作 B"

# 抽象工厂
class AbstractFactory(ABC):
    @abstractmethod
    def create_product(self):
        pass

# 具体工厂 A
class ConcreteFactoryA(AbstractFactory):
    def create_product(self):
        return ConcreteProductA()

# 具体工厂 B
class ConcreteFactoryB(AbstractFactory):
    def create_product(self):
        return ConcreteProductB()

# 客户端代码
if __name__ == "__main__":
    factory_a = ConcreteFactoryA()
    product_a = factory_a.create_product()
    print(product_a.operation())

    factory_b = ConcreteFactoryB()
    product_b = factory_b.create_product()
    print(product_b.operation())

总结

工厂方法模式通过将对象的创建过程抽象化,使得对象创建过程与客户端代码解耦,提高了代码的灵活性和可扩展性。

工厂方法模式示意图