Python
設計模式
單例模式
Lazy初始化,指行緒不安全
class Singleton(object):
_instance = None
def __new__(cls, *args, **kw):
if not cls._instance:
cls._instance = super(Singleton, cls).__new__(cls, *args, **kw)
return cls._instance
class MyClass(Singleton):
a = 1
one = MyClass()
two = MyClass()
one == two
沒Lazy初始化,指行緒安全
class Singleton1(object):
pass
class Singleton2(Singleton1):
__instance = Singleton1()
def __new__(cls, *args, **kw):
return cls.__instance
class MyClass2(Singleton2):
a = 2
new_one = MyClass2()
new_two = MyClass2()
new_two == new_two
程式碼說明
每個範例最後一行都是確認兩者是否相同
第一個範例用了if判斷_instance是否為空值,如果是,則實作物件,為Lazy初始化
第一個範例先定義singleton1,在singleton2直接實作在_instance,這是模仿java的做法,不確定執行緒安全與否。
留言
張貼留言