单例模式
一种设计模式,MVVM MVC MTV
常推荐书籍常见设计模式
要保证一个类只能有一个实例(单例)
为什么这么设计?
目的是为了节省内存开销
如果两个对象的数据一模一样 就没有必要创建新对象 直接使用已有的即可
场景:
当一个类的所有实例数据都完全相同时 则应该设计为单例
音乐播放器类 实例化产生播放器对象
单例的实现方式:
自定义元类 覆盖__call__ 添加判断逻辑 保证只能实例化一个对象
"""
class MySingleton(type):
obj = None
def __call__(self, *args, **kwargs):
if not self.obj:
# 创建空对象
obj = object.__new__(self)
# 调用初始化方法
self.__init__(obj, *args, **kwargs)
self.obj = obj
return self.obj
class Player(metaclass=MySingleton):
# 默认为空
obj = None
def __init__(self):
print("创建了一个播放器对象....")
def play(self,path):
self.stop()
print("playing...",path)
def stop(self):
print("stop music")
# 用于获取播放器对象
@classmethod
def get_player(cls):
if not cls.obj:
print("创建播放器...")
cls.obj = cls()
return cls.obj
p1 = Player.get_player()
p1.play("爱你一万年1.")
p2 = Player.get_player()
p2.play("爱你一万年2.")
Player().play("我的滑板鞋!")
通过控制实例化对象 保证只创建一个对象来调用函数方法