klasa statyczna vs singleton - różnice, zastosowania

0

Witam.

Możecie mi powiedzieć czym różni się od praktycznej strony singleton od klasy statycznej?
O ile dobrze rozumiem ten wzorzec to możemy mieć jedną instancję takiej klasy (tzn wszystkie instancje odwołują się i tak do tych samych obiektów), więc wydaję mi się, że działa to tak samo jak w przypadku klasy statycznej.
Pytanie gdzie się mylę :)?

0

To jest to samo. Zwłaszcza, że singleton w C++ tworzy się właśnie tak:

MyClass & GetMyClass()
{
  static MyClass instance;
  return instance;
}
4

Różnic jest wiele. Takie podstawowe:

  1. W przypadku singletonu masz instancje obiektu co pozwala np. synchronizować sie na tym obiekcie
  2. W przypadku singletonu masz możliwość korzystania z polimorfizmu. Metody statyczne (a tylko takie będziesz miał w tej swojej statycznej klasie) z definicji nie mogą być polimorficzne.
  3. Pisanie testów jednostkowych dla klas używających staticów wymaga czarnej magii (np. dla javy wymaga Powermocka) podczas gdy podmiana singletonu na mocka jest prosta, szczególnie jeśli jest wstrzykiwany przez jakieś IoC.
  4. Singleton pozwala kontrolować dostęp bo trzeba go sobie wstrzyknać / pobrać. Dostęp do klasy nie jest w żaden sposób kontrolowany.
  5. Można zrealizować sobie N-gleton, podczas gdy dla klasy zawsze będzie tylko jeden "worker".

1 użytkowników online, w tym zalogowanych: 0, gości: 1