【问题标题】:Is it bad to set up singletons such that all methods are static methods?设置单例以使所有方法都是静态方法是不是很糟糕?
【发布时间】:2012-10-31 16:33:35
【问题描述】:

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

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 既丑陋又不直观。

是否有充分的理由偏爱其中一个而不是另一个?意见很好。只是好奇别人怎么想。

【问题讨论】:

标签: static singleton private public


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-27
    • 2020-06-07
    • 1970-01-01
    • 2011-08-28
    • 2019-09-25
    • 1970-01-01
    相关资源
    最近更新 更多