设计模式-工厂模式
发布人:shili8
发布时间:2025-02-21 19:40
阅读次数:0
**设计模式 - 工厂模式**
工厂模式是一种常见的设计模式,用于创建对象,而不是直接实例化它们。这种模式通过定义一个工厂类来封装对象的创建过程,使得客户端代码不需要知道具体的实现细节。
**问题背景**
在软件开发中,我们经常会遇到这样的场景:我们需要创建多种类型的对象,例如汽车、摩托车、飞机等。每种类型的对象都有其特定的属性和行为。如果我们直接实例化这些对象,代码将变得非常冗长且难以维护。
**解决方案**
工厂模式提供了一种解决方案,使得我们可以通过定义一个工厂类来创建不同类型的对象,而不需要知道具体的实现细节。这种模式分为两种类型:简单工厂和抽象工厂。
### 简单工厂简单工厂是一种最基本的工厂模式,它提供了一个工厂方法用于创建对象。
**代码示例**
# 定义一个简单工厂类class CarFactory: @staticmethod def create_car(car_type): if car_type == "sedan": return SedanCar() elif car_type == "suv": return SUVCar() else: raise ValueError("Invalid car type") # 定义不同类型的汽车类class SedanCar: passclass SUVCar: pass# 使用工厂方法创建汽车对象car = CarFactory.create_car("sedan") print(car.__class__.__name__) # 输出:SedanCar
在上面的示例中,我们定义了一个 `CarFactory` 类,它提供了一个 `create_car` 方法用于创建不同类型的汽车对象。客户端代码可以通过调用这个方法来创建所需的汽车对象,而不需要知道具体的实现细节。
### 抽象工厂抽象工厂是一种更高级的工厂模式,它提供了一组工厂方法用于创建不同类型的对象。
**代码示例**
# 定义一个抽象工厂类class VehicleFactory: @staticmethod def create_vehicle(vehicle_type): if vehicle_type == "car": return CarFactory() elif vehicle_type == "motorcycle": return MotorcycleFactory() else: raise ValueError("Invalid vehicle type") # 定义不同类型的汽车和摩托车工厂类class CarFactory: @staticmethod def create_car(car_type): if car_type == "sedan": return SedanCar() elif car_type == "suv": return SUVCar() else: raise ValueError("Invalid car type") class MotorcycleFactory: @staticmethod def create_motorcycle(motorcycle_type): if motorcycle_type == "sport": return SportMotorcycle() elif motorcycle_type == "cruiser": return CruiserMotorcycle() else: raise ValueError("Invalid motorcycle type") # 定义不同类型的汽车和摩托车类class SedanCar: passclass SUVCar: passclass SportMotorcycle: passclass CruiserMotorcycle: pass# 使用工厂方法创建汽车或摩托车对象car_factory = VehicleFactory.create_vehicle("car") car = car_factory.create_car("sedan") motorcycle_factory = VehicleFactory.create_vehicle("motorcycle") motorcycle = motorcycle_factory.create_motorcycle("sport") print(car.__class__.__name__) # 输出:SedanCarprint(motorcycle.__class__.__name__) # 输出:SportMotorcycle
在上面的示例中,我们定义了一个 `VehicleFactory` 类,它提供了一组工厂方法用于创建不同类型的汽车和摩托车对象。客户端代码可以通过调用这些方法来创建所需的汽车或摩托车对象,而不需要知道具体的实现细节。
**总结**
工厂模式是一种常见的设计模式,用于创建对象,而不是直接实例化它们。这种模式通过定义一个工厂类来封装对象的创建过程,使得客户端代码不需要知道具体的实现细节。简单工厂和抽象工厂是两种类型的工厂模式,它们分别提供了一组工厂方法用于创建不同类型的对象。
**参考**
* 《设计模式:可复用面向对象软件的基础》
* 《Head First 设计模式》