保证一个类只有一个实例
例子
class Singleton(object):
def __new__(cls, *args, **kwargs):
#new方法在__init__之前调用,初始化一个类,给类分配空间,给类对象初始化的,__init__是
#给某个属性初始化复制
if not hasattr(cls, "_instance"):
#调用object的new方法给继承Singleton的子类初始化一个对象
cls._instance = super(Singleton, cls).__new__(cls)
return cls._instance
class Aclass(Singleton):
def __init__(self,a):
self.a = a
a = Aclass(10)
b = Aclass(20)
print a.a
print b.a
#这里打印出来都是20,因为b在__init__之前调用__new__方法,已经有_instance这个属性了(a初始化时创建的)
#所以直接返回a创建出来的实例
print id(a),id(b)
#这里id是一样的,保证了只有一个实例
创建型模式总结
抽象工厂,建造者模式更灵活一般先从工厂模式开始,觉得需要更灵活或者更复杂了就开始向抽象工厂或者建造者模式演变



