意图: 保证一个类仅有一个实例,并提供一个访问它的全局访问点

适用性: 1. 当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时。 2. 当这个唯一实例应该通过子类化可扩展的,并且客户应该无需更改代码就能使用一个扩展的实例时。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# coding:utf-8


class Singleton(object):
def __new__(cls, *args, **kwargs):
if not hasattr(cls, '_instance'):
orig = super(Singleton, cls)
cls._instance = orig.__new__(cls)
return cls._instance


class MyClass(Singleton):
def __init__(self, name):
self.name = name


a = MyClass("Alex")
b = MyClass("Jack")
print(a.name)
print(b.name)