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的做法,不確定執行緒安全與否。
留言
張貼留言