单例模式主要有四种方法:new、共享属性、装饰器、import。
# __ new__方法: class Singleton(object): def __new__(cls, *args, **kw): if not hasattr(cls, '_instance'): orig = super(Singleton, cls) cls._instance = orig.__new__(cls, *args, **kw) return cls._instance class MyClass(Singleton): a = 1
# 共享属性: # 创建实例时把所有实例的__ dict__指向同一个字典,这样它们就具有了相同的属性和方法。 class Borg(object): _state = {} def __new__(cls, *args, **kw): ob = super(Borg, cls).__new__(cls, *args, **kw) ob.__dict__ = cls._state return ob class MyClass2(Borg): a = 1
# 装饰器版本 def singleton(cls, *args, **kw): instances = {} def getinstance(): if cls not in instances: instances[cls] = cls(*args, **kw) return instances[cls] return getinstance @singleton class MyClass:
#import方法,作为python的模块是天然的单例模式 # mysingleton.py class My_Singleton(object): def foo(self): pass my_singleton = My_Singleton() # to use from mysingleton import my_singleton my_singleton.foo()
其他23中设计模式基本分为创建型、结构型和行为型模式。
创建模式,提供实例化的方法,为适合的状况提供相应的对象创建方法。
结构化模式,通常用来处理实体之间的关系,使得这些实体能够更好地协同工作。
行为模式,用于在不同的实体间建立通信,为实体之间的通信提供更容易,更灵活的通信方法。
各模式的实现可根据其特点编写代码。
创建模式,提供实例化的方法,为适合的状况提供相应的对象创建方法。
结构化模式,通常用来处理实体之间的关系,使得这些实体能够更好地协同工作。
行为模式,用于在不同的实体间建立通信,为实体之间的通信提供更容易,更灵活的通信方法。
各模式的实现可根据其特点编写代码。