工厂方法模式是一种创建型设计模式,其核心在于定义一个用于创建对象的接口,并允许子类决定实例化的类。这种模式使一个类的实例化延迟到其子类中,从而实现解耦。
核心概念
在工厂方法模式中,包含以下角色:
- 抽象工厂(Abstract Factory):定义了创建对象的基本接口,用于创建产品对象。
- 具体工厂(Concrete Factory):实现了在抽象工厂中声明的方法,用于创建实际的对象。
- 产品(Product):一个抽象产品类,声明了具体产品的公共接口。
- 具体产品(Concrete Product):实现了抽象产品接口,定义了创建的具体产品。
实现步骤
- 定义抽象工厂接口:声明创建产品对象的工厂方法。
- 实现具体工厂类:实现抽象工厂接口,并创建具体产品对象。
- 创建产品类:实现抽象产品接口,定义具体产品的行为。
- 客户端代码:创建具体工厂的实例,并调用工厂方法来获取产品对象。
代码示例
以下是一个简单的工厂方法模式的代码示例:
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())
总结
工厂方法模式通过将对象的创建过程抽象化,使得对象创建过程与客户端代码解耦,提高了代码的灵活性和可扩展性。
工厂方法模式示意图