工厂方法和抽象工厂的联系与区别详解

工厂方法模式(Factory Method Pattern)

工厂方法模式是一种创建型设计模式,它定义了一个用于创建对象的接口,但将实际的对象创建延迟到子类。在工厂方法模式中,有一个抽象工厂类声明了一个工厂方法,该方法由子类实现,用于创建具体的产品对象。每个具体的产品都有一个对应的工厂类。这样,客户端可以通过调用工厂方法来创建所需的产品,而不必关心具体的产品类。

伪代码

只创建一个产品

实例演示

class Product(ABC):
    @abstractmethod
    def display(self):
        pass

class ConcreteProductA(Product):
    def display(self):
        print("This is ConcreteProductA.")

class ConcreteProductB(Product):
    def display(self):
        print("This is ConcreteProductB.")

class Factory(ABC):
    @abstractmethod
    def create_product(self):
        pass

class ConcreteFactoryA(Factory):
    def create_product(self):
        return ConcreteProductA()

class ConcreteFactoryB(Factory):
    def create_product(self):
        return ConcreteProductB()

def main():
    factory_a = ConcreteFactoryA()
    product_a = factory_a.create_product()
    product_a.display()

    factory_b = ConcreteFactoryB()
    product_b = factory_b.create_product()
    product_b.display()

if __name__ == "__main__":
    main()

抽象工厂模式(Abstract Factory Pattern)

抽象工厂模式也是一种创建型设计模式,它提供了一个接口,用于创建相关或依赖对象的家族,而不需要指定它们的具体类。在抽象工厂模式中,有一个抽象工厂接口,该接口声明了一组用于创建不同产品家族的方法。每个具体的工厂类实现了这个接口,用于创建特定的产品家族。而这些产品家族通常是一起工作的,或者可以彼此替换。

伪代码

创建多个产品

实例演示

class ProductA(ABC):
    @abstractmethod
    def display(self):
        pass

class ConcreteProductA1(ProductA):
    def display(self):
        print("This is ConcreteProductA1.")

class ConcreteProductA2(ProductA):
    def display(self):
        print("This is ConcreteProductA2.")

class ProductB(ABC):
    @abstractmethod
    def display(self):
        pass

class ConcreteProductB1(ProductB):
    def display(self):
        print("This is ConcreteProductB1.")

class ConcreteProductB2(ProductB):
    def display(self):
        print("This is ConcreteProductB2.")

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()

def main():
    factory1 = ConcreteFactory1()
    product_a1 = factory1.create_product_a()
    product_b1 = factory1.create_product_b()

    product_a1.display()
    product_b1.display()

    factory2 = ConcreteFactory2()
    product_a2 = factory2.create_product_a()
    product_b2 = factory2.create_product_b()

    product_a2.display()
    product_b2.display()

if __name__ == "__main__":
    main()

以上是工厂方法模式和抽象工厂模式的详细介绍及代码实例。工厂方法模式适用于创建单个对象,而抽象工厂模式适用于创建一组相关的产品家族。在实际应用中,根据不同的需求和复杂性,选择适合的设计模式可以帮助提高代码的灵活性和可维护性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值