Python中的工厂模式和单例模式是两种重要的设计模式,分别用于解决对象创建和资源管理的不同问题。以下是两者的核心概念及实现方式:
一、单例模式(Singleton Pattern)
核心概念 :确保一个类只有一个实例,并提供全局访问点,适用于管理共享资源(如数据库连接、配置管理)。
实现方式 :
-
经典实现 :通过
__new__
方法控制实例化,使用类变量_instance
存储唯一实例。class Singleton: _instance = None def __new__(cls, *args, **kwargs): if cls._instance is None: cls._instance = super().__new__(cls) return cls._instance
-
装饰器实现 :通过装饰器包装类,简化单例模式应用,但需注意线程安全问题。
def singleton(cls): instances = {} def get_instance(*args, **kwargs): key = (cls, args, frozenset(kwargs.items())) if key not in instances: instances[key] = cls(*args, **kwargs) return instances[key] return get_instance
注意事项 :多线程环境下需加锁保护,避免竞态条件。
二、工厂模式(Factory Pattern)
核心概念 :通过工厂类或方法封装对象创建逻辑,实现解耦和扩展性,适用于批量生产不同类型对象。
实现方式 :
-
简单工厂模式 :通过单一工厂类创建不同类型对象。
class AnimalFactory: @staticmethod def create_animal(animal_type): if animal_type == 'dog': return Dog() elif animal_type == 'cat': return Cat() else: return None
-
抽象工厂模式 :提供接口创建一组相关对象,无需指定具体类。
优势 :提高代码灵活性,便于新增产品类型而无需修改客户端代码。
总结
-
单例模式 :确保全局唯一实例,适用于资源池管理(如数据库连接)。
-
工厂模式 :封装对象创建逻辑,提升代码扩展性和可维护性。
两者在Python中通过类设计实现,需根据实际需求选择使用场景。