您好我想知道如何正确获取单例实例以及最佳做法是什么?
public class SingeltonTest {
private static final CounterSingelton COUNTER = CounterSingelton.getInstance();
public static void main(String[] args) {
//Type A
for (int a = 0; a < 100; a++) {
COUNTER.increase();
}
//Type B
for (int a = 0; a < 100; a++) {
CounterSingelton counter = CounterSingelton.getInstance();
counter.increase();
}
//Type C
for (int a = 0; a < 100; a++) {
CounterSingelton.getInstance().increase();
}
}
}
答案 0 :(得分:2)
最佳做法是避免static Singleton
并将其替换为contextual Singleton
。
static Singleton
访问的常见模式是使用static getInstance()
方法。在不改变签名的情况下,可以轻松更改为工厂方法或复杂的初始化过程。
但是,如果签名没有改变,行为就会改变。因此可能需要在呼叫者站点更改代码。
Type B
和Type C
完全相同。由于类的内部状态发生变化(例如延迟加载),只有Type A
可能会被破坏(将来)。