工厂模式是一种创建型设计模式,通过定义一个用于创建对象的接口,但由子类决定实例化哪个类。以下是工厂模式的核心概念和操作方法:
一、核心概念
产品类:
定义产品的接口或基类,具体产品类实现该接口或继承基类。
工厂类:
负责创建产品对象,通常包含一个或多个创建方法,根据传入参数决定实例化哪个产品类。
客户端代码:
通过工厂类获取产品对象,而无需关心具体创建过程。
二、常见形式
简单工厂模式
通过一个静态工厂方法根据参数创建不同产品对象。
```python
class AnimalFactory:
@staticmethod
def create_animal(animal_type):
if animal_type == "dog":
return Dog()
elif animal_type == "cat":
return Cat()
else:
raise ValueError("未知动物类型")
animal = AnimalFactory.create_animal("dog")
print(animal.speak())
```
工厂方法模式
在抽象基类中定义创建对象的接口,具体子类实现该方法。
```python
from abc import ABC, abstractmethod
class Animal(ABC):
@abstractmethod
def speak(self):
pass
class Dog(Animal):
def speak(self):
return "汪汪汪"
class Cat(Animal):
def speak(self):
return "喵喵喵"
class AnimalFactory(ABC):
@abstractmethod
def create_animal(self, animal_type):
pass
class DogFactory(AnimalFactory):
def create_animal(self, animal_type):
if animal_type == "dog":
return Dog()
else:
raise ValueError("未知动物类型")
factory = DogFactory()
animal = factory.create_animal("dog")
print(animal.speak())
```
抽象工厂模式
提供一组接口用于创建相关或依赖对象,而不需要明确指定具体类。
三、操作步骤
定义产品类:
创建接口或基类,并实现具体产品类。 在工厂类中定义创建产品对象的方法,根据参数返回具体产品实例。 通过工厂类获取产品对象,而无需关心创建过程。 四、优势与注意事项 解耦实现工厂类:
客户端调用:
扩展性:新增产品时只需修改工厂类,无需改动客户端代码。
注意事项:单例模式与工厂模式需注意线程安全问题。
通过以上步骤和示例,可以灵活运用工厂模式实现对象创建逻辑的封装与扩展。
文章评论