0

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

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对于经验不足的程序员来说,到处都是丑陋和不直观的记忆。

有什么好的理由更喜欢其中一个而不是另一个?意见很好。只是好奇别人怎么想。

4

1 回答 1

0

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

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();,您只需要为每个“操作”定义一个方法,而不需要一个静态方法,然后是您的第一种方法使用的实际“实例”方法。

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

于 2012-10-31T18:08:57.567 回答