工厂方法和工厂模式是什么
时间: 2024-02-26 12:48:56 浏览: 28
工厂方法模式和抽象工厂模式是两种常见的工厂模式。工厂方法模式定义了一个用于创建对象的接口,让子类决定实例化哪一个类。抽象工厂模式提供了一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。
简单工厂模式是一种创建型设计模式,它提供了一种创建对象的最佳方式。在简单工厂模式中,我们创建对象而不暴露创建逻辑。这可以帮助我们将代码从客户端代码中解耦。
举个例子,假设我们有一个汽车制造工厂,它可以制造各种类型的汽车,如轿车、卡车和摩托车。在简单工厂模式中,我们可以创建一个工厂类,该类根据客户端请求的类型来创建相应的汽车对象。在工厂方法模式中,我们可以为每种类型的汽车创建一个工厂类,这些工厂类都实现一个工厂接口。这样,客户端代码就可以使用特定的工厂类来创建特定类型的汽车对象。在抽象工厂模式中,我们可以创建一个抽象工厂接口,该接口定义了一组方法,用于创建相关的对象家族。然后,我们可以为每个对象家族创建一个具体的工厂类,这些工厂类都实现了抽象工厂接口。
下面是一个简单工厂模式的例子:
```python
class Car:
def __init__(self, name):
self.name = name
class CarFactory:
def create_car(self, car_type):
if car_type == 'SUV':
return Car('SUV')
elif car_type == 'sedan':
return Car('sedan')
elif car_type == 'hatchback':
return Car('hatchback')
factory = CarFactory()
car1 = factory.create_car('SUV')
car2 = factory.create_car('sedan')
car3 = factory.create_car('hatchback')
```
下面是一个工厂方法模式的例子:
```python
class Car:
def __init__(self, name):
self.name = name
class CarFactory:
def create_car(self):
pass
class SUVFactory(CarFactory):
def create_car(self):
return Car('SUV')
class SedanFactory(CarFactory):
def create_car(self):
return Car('sedan')
class HatchbackFactory(CarFactory):
def create_car(self):
return Car('hatchback')
suv_factory = SUVFactory()
sedan_factory = SedanFactory()
hatchback_factory = HatchbackFactory()
car1 = suv_factory.create_car()
car2 = sedan_factory.create_car()
car3 = hatchback_factory.create_car()
```
下面是一个抽象工厂模式的例子:
```python
class Car:
def __init__(self, name):
self.name = name
class SUV(Car):
pass
class Sedan(Car):
pass
class Hatchback(Car):
pass
class CarFactory:
def create_suv(self):
pass
def create_sedan(self):
pass
def create_hatchback(self):
pass
class ToyotaFactory(CarFactory):
def create_suv(self):
return SUV('Toyota SUV')
def create_sedan(self):
return Sedan('Toyota sedan')
def create_hatchback(self):
return Hatchback('Toyota hatchback')
class HondaFactory(CarFactory):
def create_suv(self):
return SUV('Honda SUV')
def create_sedan(self):
return Sedan('Honda sedan')
def create_hatchback(self):
return Hatchback('Honda hatchback')
toyota_factory = ToyotaFactory()
honda_factory = HondaFactory()
suv1 = toyota_factory.create_suv()
sedan1 = toyota_factory.create_sedan()
hatchback1 = toyota_factory.create_hatchback()
suv2 = honda_factory.create_suv()
sedan2 = honda_factory.create_sedan()
hatchback2 = honda_factory.create_hatchback()
```