Это плохо, чтобы обернуть одноэлементные методы экземпляра в статические методы?
Есть ли смысл в реализации синглтона, который оборачивает методы экземпляра статическими?
Например:
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/