Singleton
单例 是最为最常见的设计模式之一。对于任何时刻,如果某个类只存在且最多存在一个具体的实例,那么我们称这种设计模式为单例。例如,对于 class Mouse (不是动物的mouse哦),我们应将其设计为 singleton 模式。
你的任务是设计一个 getInstance 方法,对于给定的类,每次调用 getInstance 时,都可得到同一个实例。
样例
在 Java 中:
A a = A.getInstance();
A b = A.getInstance();
a 应等于 b.
挑战
如果并发的调用 getInstance,你的程序也可以正确的执行么?
Solution
这个属于设计题,熟悉即可
# python
import threading
class Solution:
__lock = threading.Lock()
__obj = None
# @return: The same instance of this class every time
@classmethod
def getInstance(cls):
if not cls.__obj:
with cls.__lock:
if not cls.__obj:
cls.__obj = cls()
return cls.__obj
// java
public class EagerSingleton {
private static volatile EagerSingleton instance = null;
// private constructor
private EagerSingleton() {
}
public static EagerSingleton getInstance() {
if (instance == null) {
synchronized (EagerSingleton.class) {
// Double check
if (instance == null) {
instance = new EagerSingleton();
}
}
}
return instance;
}
}