设置单例以使所有方法都是静态方法是不是很糟糕?

时间:2012-10-31 16:33:36

标签: static singleton private public

我经常设置打算供其他程序员使用的单例类,我发现我不确定是否有一种首选方法来设置对这些类中方法的访问。我认为这两种方式是:

public class MyClass {
    private static MyClass instance;

    public static void DoStuff( ) {
        instance.DoStuffInstance( );
    }

    private void DoStuffInstance( ) {
        // Stuff happens here...
    }
}

其用法为:MyClass.DoStuff( );

或类似的东西:

public class MyClass {
    public static MyClass instance;

    public void DoStuff( ) {
        // Stuff happens here...
    }
}

其用法为:MyClass.instance.DoStuff( );

就个人而言,我倾向于选择第一种选择。我发现,对于经验不足的程序员来说,到处都有MyClass.instance对于记忆来说既丑陋又不直观。

有没有什么好理由更喜欢其中一种?意见很好。只是好奇别人的想法。

1 个答案:

答案 0 :(得分:0)

我从未见过以这种方式实施的Singleton。典型设置可能是这样的:

public class MyClass {

    private static final MyClass instance = null;

    // Private to ensure that no other instances can be allocated.
    private MyClass() {}

    // Not thread safe!
    public static MyClass getInstance() {
        if( instance == null ) {
            instance = new MyClass();
        }
        return instance;
    }

    public void DoStuff( ) {
        // Stuff happens here...
    }
}

这样所有的调用都类似于instance.DoStuff();,你只需要为每个“操作”定义一个方法,而不是需要一个静态方法,然后是第一个方法的实际“实例”方法使用

此外,您设置它的方式,看起来您可以在实际初始化实例之前调用这些静态方法,这是一个问题。