在静态方法中包装单例实例方法是不是很糟糕?

时间:2016-07-27 05:12:03

标签: static singleton static-methods singleton-methods

是否存在实现使用静态方法包装实例方法的单例的问题?

例如:

    public void DoStuff() { instance._DoStuff(); }
    private void _DoStuff() {

        ...
    }

当然,实例将是静态的。但是打电话会更好:

Singleton.DoStuff();

而不是:

Singleton.GetInstance().DoStuff();

1 个答案:

答案 0 :(得分:0)

我认为这取决于。

首先,GetInstance()确实应该用于获取对象,然后在代码中使用其他位置。 Singleton应该只是帮助保证该对象的单个实例存在。

接下来,如果你想让DoStuff静态继续,你必须知道在代码中的其他地方都这样称呼它。

所以你真的有这个区别:

var instance = Singleton.GetInstance();
...
instance.DoStuff ()

Vs的

Singleton.DoStuff ()

这意味着您可以传递单个对象,而不必知道静态调用。

此外,我必须提到单身人士如果使用不当会导致单元测试中的噩梦:http://misko.hevery.com/2008/08/25/root-cause-of-singletons/