单例模式
2018-06-10 本文已影响0人
bboyAyao
1.属性值可修改的单例模式
class Singleton(object):
__instance = None
def __init__(self,*args,**kwargs):
self.args = args
self.kwargs = kwargs
print("init方法")
def __new__(cls,*args,**kwargs):
print("new方法")
if not cls.__instance:
cls.__instance = object.__new__(cls)
return cls.__instance
a = Singleton()
b = Singleton()
print(id(a))
print(id(b))
#-----------------------运行结果-------------------------
new方法
init方法
new方法
init方法
2210815852840
2210815852840
2.属性值不可修改的单例模式
class Singleton():
__instance = None
__isfirst = True
def __init__(self,*args,**kwargs):
if self.__isfirst:
self.args = args
self.kwargs = kwargs
self.__isfirst = False
def __new__(cls,*args,**kwargs):
if not cls.__instance:
cls.__instance = object.__new__(cls)
return cls.__instance
a = Singleton(1)
print(a.args)
b = Singleton(2)
print(b.args)
print(id(a))
print(id(b))
#---------------------运行结果----------------------
(1,)
(1,)
2718748033320
2718748033320
优缺点:
优点:
在单例模式中,活动的单例只有一个实例,对单例类的所有实例化得到的都是相同的一个实例。它可以保证我们不会重复创建,二十始终指向同一个对象,因此可以节约系统资源和保持全局状态。
缺点:
1.不适用于变换的对象,如果同一类型的对象总是要在不同的用例场景发生变化,单例就会引起数据的错误。
2.单例类的职责过重,在一定程度上违背了“单一职责原则”。
3.可能会被垃圾回收机制当作垃圾回收。