单例模式
保证某个类在全局只存在一个实例
class Singleton:
def __new__(cls,*args,**kwargs):
if not hasattr(cls,'_instance'):
cls._instance= super().__new__(cls,*args,**kwargs)
return cls._instance
def __init__(self):
pass
s1 = Singleton()
s2 = Singleton()
print(s1 is s2)
单例模式的应用场景:
- 全局唯一的变量或资源
- 某个类占用许多资源的情况
- 需要统一全局统一管理的类,如计数器
单例模式的优点:
- 节省内存空间和系统开销
- 因为全局只有一个实例,易于控制
单例模式的缺点:
- 不易拓展
- 容易遇到性能瓶颈
- 不易测试
工厂模式
每个实例都有一个工厂类来进行创造,而不是直接创建实例。
class Product:
def __init__(self):
pass
def getName(self):
return self.name
def getPrice(self):
return self.price
class Pen(Procduct):
def __init__(self):
self.name = 'pen'
self.price = 10
class Paper(Product):
def __init__(self):
self.name = 'paper'
self.price = 15
class ProductFactory:
def pruduce(self):
return self.productClass()
class PenFactory(ProductFactory):
def __init__(self):
self.productClass = Pen
class PaperFactory(ProductFactory):
def __init__(self):
self.productClass = Paper
p1 = PenFactory()
p2 = PaperFacory()
pen = p1.produce()
paper= p2.produce()
使用场景:
- 使用场景比较灵活,但是生成实例比较复杂,在小项目中会比较繁琐
优点:
- 代码结构清晰,易读,容易扩展
- 有良好的封装性
- 解耦合,产品类和工厂类可以分别开发