Это плохо, чтобы обернуть одноэлементные методы экземпляра в статические методы?

Есть ли смысл в реализации синглтона, который оборачивает методы экземпляра статическими?

Например:

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

        ...
    }

И, конечно, экземпляр будет статичным. Но было бы лучше позвонить

Singleton.DoStuff();

Вместо:

Singleton.GetInstance().DoStuff();

1 ответ

Я думаю, что это зависит.

Сначала действительно нужно использовать GetInstance() для возврата объекта, а затем использовать его где-то еще в вашем коде. Singleton должен просто гарантировать, что существует единственный экземпляр этого объекта.

Далее, если вы хотите, чтобы DoStuff был статичным, но вы должны знать, как его называть везде в вашем коде.

Таким образом, у вас действительно есть эта разница:

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

Vs

Singleton.DoStuff ()

Это означает, что вы можете передавать одноэлементный объект и не знать статических вызовов.

Кроме того, я должен отметить, что использование Singleton s при неправильном использовании может привести к кошмару при юнит-тестировании: http://misko.hevery.com/2008/08/25/root-cause-of-singletons/

Другие вопросы по тегам