singelton实例的制作方式有很大差异吗?

时间:2015-11-12 07:55:14

标签: java design-patterns

您好我想知道如何正确获取单例实例以及最佳做法是什么?

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();
        }
    }
}

1 个答案:

答案 0 :(得分:2)

最佳做法是避免static Singleton并将其替换为contextual Singleton

static Singleton访问的常见模式是使用static getInstance()方法。在不改变签名的情况下,可以轻松更改为工厂方法或复杂的初始化过程。

但是,如果签名没有改变,行为就会改变。因此可能需要在呼叫者站点更改代码。

Type BType C完全相同。由于类的内部状态发生变化(例如延迟加载),只有Type A可能会被破坏(将来)。