...

Python设计模式-01-工厂模式

工厂模式

工厂模式(Factory Pattern)是一种创建型设计模式,它提供了一种创建对象的最佳方式,而无需指定将要创建的对象的确切类。工厂模式通过定义一个工厂接口来创建对象,让子类决定实例化哪个类。这样可以将对象的创建与使用分离,从而降低系统的耦合度。

工厂模式包含三种角色:

  • 具体工厂(Concrete Factory):实现了工厂接口,用于创建具体的产品。
  • 产品(Product):定义了工厂创建的对象的接口。

以下是一个简单的Python示例代码,演示了工厂模式的实现:

from abc import ABC, abstractmethod

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

# 具体产品A
class ProductA(Product):
    def use(self):
        print("ProductA is used.")

# 具体产品B
class ProductB(Product):
    def use(self):
        print("ProductB is used.")

# 工厂
class Factory:
    def create_product(self, product_type):
        if product_type == "A":
            return ProductA()
        elif product_type == "B":
            return ProductB()
        else:
            raise ValueError("Invalid product type.")

# 客户端代码
factory = Factory()
product_a = factory.create_product("A")
product_a.use()

product_b = factory.create_product("B")
product_b.use()

抽象工厂

普通工厂模式和抽象工厂模式都是工厂模式的变体,它们的主要区别在于抽象工厂模式可以创建一组相关的产品,而普通工厂模式只能创建单一的产品。

普通工厂模式(Factory Pattern)是一种创建型设计模式,它提供了一种创建对象的最佳方式,而无需指定将要创建的对象的确切类。普通工厂模式通过定义一个工厂接口来创建对象,让子类决定实例化哪个类。这样可以将对象的创建与使用分离,从而降低系统的耦合度。

抽象工厂模式(Abstract Factory Pattern)是一种创建型设计模式,它提供了一种创建一组相关或相互依赖对象的最佳方式,而无需指定它们的具体类。抽象工厂模式通过定义一个工厂接口来创建对象,让子类决定实例化哪个类。这样可以将对象的创建与使用分离,从而降低系统的耦合度。

普通工厂模式只能创建单一的产品,而抽象工厂模式可以创建一组相关的产品。例如,一个汽车工厂可以生产多种型号的汽车,每种型号的汽车都由不同的部件组成。在普通工厂模式中,只能创建单一型号的汽车,而在抽象工厂模式中,可以创建一组相关的部件,从而生产多种型号的汽车。

另外,普通工厂模式只需要一个工厂类,而抽象工厂模式需要多个工厂类。在普通工厂模式中,工厂类负责创建单一的产品,而在抽象工厂模式中,每个工厂类负责创建一组相关的产品。

总之,普通工厂模式和抽象工厂模式都是工厂模式的变体,它们的主要区别在于抽象工厂模式可以创建一组相关的产品,而普通工厂模式只能创建单一的产品。选择哪种模式取决于具体的需求。

from abc import ABC, abstractmethod

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

# 具体产品A
class ProductA(Product):
    def use(self):
        print("ProductA is used.")

# 具体产品B
class ProductB(Product):
    def use(self):
        print("ProductB is used.")

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

# 具体工厂A
class FactoryA(Factory):
    def create_product(self):
        return ProductA()

# 具体工厂B
class FactoryB(Factory):
    def create_product(self):
        return ProductB()

# 客户端代码
factory_a = FactoryA()
product_a = factory_a.create_product()
product_a.use()

factory_b = FactoryB()
product_b = factory_b.create_product()
product_b.use()

在这个示例代码中,首先定义了抽象产品Product和抽象工厂Factory。然后定义了两个具体产品ProductA和ProductB,以及两个具体工厂FactoryA和FactoryB。最后在客户端代码中,分别使用FactoryA和FactoryB创建了ProductA和ProductB,并调用了它们的use方法。

工厂模式的优点在于它可以将对象的创建与使用分离,从而降低系统的耦合度。同时,工厂模式也可以很容易地扩展,只需要添加新的具体产品和具体工厂即可。

posted @ 2023-06-07 20:14  韩志超  阅读(550)  评论(0编辑  收藏  举报