klasa statyczna vs singleton - różnice, zastosowania

2016-01-12 11:43

Rejestracja: 8 lat temu

Ostatnio: 1 dzień temu

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ę :)?

Pozostało 580 znaków

2016-01-12 11:55

Rejestracja: 17 lat temu

Ostatnio: 1 godzina temu

0

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

MyClass & GetMyClass()
{
  static MyClass instance;
  return instance;
}
czekaj... ze co? wez prosze... to jest singleton ;o? Chybas nie powazny - fasadin 2016-01-12 12:01
@Juhas bzdury jakieś, to że zwraca referencje na statyczny obiekt wcale nie znaczy że to jest singleton. - _13th_Dragon 2016-01-12 12:05
Pominąłem tylko, że GetMyClass powinno być statyczną metodą publiczną, a konstruktory klasy prywatne. Ale ok, jak się na to patrzy, to można rozróżnić klasę statyczną od singletonu. - Juhas 2016-01-13 19:53

Pozostało 580 znaków

2016-01-12 12:10
Moderator

Rejestracja: 16 lat temu

Ostatnio: 16 minut temu

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".

Masz problem? Pisz na forum, nie do mnie. Nie masz problemów? Kup komputer...
można się synchronizować na klasie statycznej, także posiada locka - JasnyPatryk 2016-01-12 13:40
To juz trochę kwestia implemenetacji. W javie i pythonie klasa jest obiektem więc można to zrobić. - Shalom 2016-01-12 13:44
myślałem że wszyscy myślimy o javie - kto by chcial pisal w czyms innym - JasnyPatryk 2016-01-12 13:49
wyczuwam pascal hateing - karolinaa 2016-01-12 13:52

Pozostało 580 znaków

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