抽象工厂方法(Abstract Factory)是一种创建型设计模式,它提供了一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。这种模式允许客户端代码与具体类的创建逻辑解耦,使得系统可以轻松地切换不同系列的对象。
在抽象工厂模式中,通常有以下几个角色:
- 抽象工厂(AbstractFactory):这是一个接口,声明了创建各种抽象产品的方法。
- 具体工厂(ConcreteFactory):实现了抽象工厂接口,负责创建具体的产品。
- 抽象产品(AbstractProduct):这是一个接口,声明了产品对象的操作。
- 具体产品(ConcreteProduct):实现了抽象产品接口,定义了具体的产品对象。
- 客户端(Client):使用抽象工厂和抽象产品类定义的接口。
下面是一个使用 Python 实现的抽象工厂方法的例子:
# 抽象产品
class Phone:
def specification(self):
pass
class Laptop:
def specification(self):
pass
# 具体产品
class ApplePhone(Phone):
def specification(self):
return "Apple iPhone with iOS"
class AppleLaptop(Laptop):
def specification(self):
return "Apple MacBook with macOS"
class SamsungPhone(Phone):
def specification(self):
return "Samsung Galaxy with Android"
class SamsungLaptop(Laptop):
def specification(self):
return "Samsung Notebook with Windows"
# 抽象工厂
class Factory:
def create_phone(self):
pass
def create_laptop(self):
pass
# 具体工厂
class AppleFactory(Factory):
def create_phone(self):
return ApplePhone()
def create_laptop(self):
return AppleLaptop()
class SamsungFactory(Factory):
def create_phone(self):
return SamsungPhone()
def create_laptop(self):
return SamsungLaptop()
# 客户端代码
def client_code(factory):
phone = factory.create_phone()
laptop = factory.create_laptop()
print(phone.specification())
print(laptop.specification())
if __name__ == "__main__":
print("Client code with Apple factory:")
client_code(AppleFactory())
print("\nClient code with Samsung factory:")
client_code(SamsungFactory())
在这个例子中,我们定义了一个抽象工厂 Factory
,它有两个方法 create_phone
和 create_laptop
,用于创建手机和笔记本电脑。然后,我们为苹果和三星品牌分别创建了具体工厂 AppleFactory
和 SamsungFactory
,以及具体产品 ApplePhone
、AppleLaptop
、SamsungPhone
和 SamsungLaptop
。
客户端代码 client_code
接受一个工厂对象作为参数,并使用该工厂创建手机和笔记本电脑,然后打印出它们的规格。这样,客户端代码与具体产品的创建逻辑解耦,可以轻松地切换不同品牌的工厂。
输出将是:
Client code with Apple factory:
Apple iPhone with iOS
Apple MacBook with macOS
Client code with Samsung factory:
Samsung Galaxy with Android
Samsung Notebook with Windows
这个例子展示了如何使用抽象工厂方法来创建不同品牌的产品,同时保持了客户端代码与具体产品类的解耦。