思路
1、单例模式,顾名思义只有一个对象
- Python创建对象经过两个过程
- 给对象分配空间
- 初始化对象
2、所以如果想要只创建一个对象,则所有的对象指向同一地址就可以了
其中初始化 后面发现 既然对象 只有一个,也可以只初始化一次,实现的代码是优化后的结果
实现
假设有一个播放器类,则每次同时只能播放一首曲子
class MusicPlayer:
# 定义类变量来记录对象是否已经创建过
instance = None
# 定义初始化标记变量记录对象是否已经被初始化过
init_flag = False
# 使用__new__方法分配地址,谨记三个参数和本方法需要把创建的对象返回
def __new__(cls, *args, **kwargs):
# 如果对象没有被创建过
if cls.instance is None:
# 使用父类的(object类)的__new__方法来创建对象
cls.instance = super().__new__(cls)
# 返回对象,以供__init__方法初始化
return cls.instance
# 使用__init__初始化对象
def __init__(self):
# 判断对象是否已经被初始化过
if MusicPlayer.init_flag:
# 初始化过对象则无需重复初始化对象
return
# 没有初始化过对象则先把,初始化标志置为True
MusicPlayer.init_flag = True
# 对对象进行初始化
print("初始化方法")
musicPlayer1 = MusicPlayer()
musicPlayer2 = MusicPlayer()
musicPlayer3 = MusicPlayer()
print(musicPlayer1)
print(musicPlayer2)
print(musicPlayer3)
总结
- 设计模式中,单例模式比较容易理解,即只一个类只创建一个对象,可以类比于Java中的单例模式。
关键点就是把所有对象的引用指向同一个地址空间