📜  工厂设计模式 (1)

📅  最后修改于: 2023-12-03 15:25:24.640000             🧑  作者: Mango

工厂设计模式

工厂设计模式(Factory Design Pattern)是一种创建型设计模式,用于创建对象。它提供了一种在不暴露对象创建逻辑的情况下创建对象的方式。工厂封装了对象的创建过程,并返回新创建的对象。

优点
  1. 工厂设计模式提供了一种解耦方式,将对象的创建逻辑与客户端代码进行分离,不必暴露对象的创建细节,减少了客户端代码的复杂度。

  2. 工厂设计模式可以创建对象的实例,并返回它们的统一接口,使得客户端代码可以向这些接口编程而不需要了解具体的实现。

  3. 工厂设计模式提供了高度的灵活性,可以根据需要动态地更改对象的创建逻辑。

使用场景
  1. 当一个类不知道它所必须创建的对象的类时。

  2. 当一个类希望由它的子类来指定所创建的对象时。

  3. 当类将创建对象的职责委托给多个帮助子类中的其中一个,并且希望能够在运行时更改它所委托的子类时。

实现方式

实现工厂设计模式通常有三种方式,分别为简单工厂、工厂方法和抽象工厂。

简单工厂

简单工厂模式提供了一个工厂类(通常为静态类或单例类),该类根据给定的参数来创建对象。简单工厂最大的优点是将对象创建的过程封装起来,客户端无需知道具体的创建细节,只需通过工厂类来创建对象即可。

class Car:
    def drive(self):
        print('Driving a car')

class Truck:
    def drive(self):
        print('Driving a truck')

class VehicleFactory:
    @staticmethod
    def create_vehicle(vehicle_type):
        if vehicle_type == 'car':
            return Car()
        elif vehicle_type == 'truck':
            return Truck()
        else:
            raise ValueError('Invalid vehicle type')
工厂方法

工厂方法模式定义了一个接口或抽象类,用于创建对象。子类实现这些接口或继承这些抽象类,根据需要来创建对象。工厂方法模式通过将对象创建的职责分配给子类来实现了更高的灵活性。

class Vehicle:
    def drive(self):
        pass

class Car(Vehicle):
    def drive(self):
        print('Driving a car')

class Truck(Vehicle):
    def drive(self):
        print('Driving a truck')

class VehicleFactory:
    def create_vehicle(self):
        pass

class CarFactory(VehicleFactory):
    def create_vehicle(self):
        return Car()

class TruckFactory(VehicleFactory):
    def create_vehicle(self):
        return Truck()
抽象工厂

抽象工厂模式定义了一个接口或抽象类,用于创建一组相关的对象。它提供一种方式,用于创建多个产品族而不需要指定具体的类。

class Vehicle:
    def drive(self):
        pass

class Car(Vehicle):
    def drive(self):
        print('Driving a car')

class Truck(Vehicle):
    def drive(self):
        print('Driving a truck')

class Factory:
    def create_car(self):
        pass

    def create_truck(self):
        pass

class DomesticFactory(Factory):
    def create_car(self):
        return Car()

    def create_truck(self):
        return Truck()

class ForeignFactory(Factory):
    def create_car(self):
        return Car()

    def create_truck(self):
        return Truck()
总结

工厂设计模式是一种非常有用的设计模式,它提供了一种解耦方式,将对象的创建逻辑与客户端代码进行分离。它通过将对象创建的职责分配给子类来实现了更高的灵活性,并提供了一种方式,用于创建多个产品族而不需要指定具体的类。在实际的开发中,我们可以根据实际的业务需求来选择合适的工厂设计模式实现方式。