Singletone vs Namespace vs Metody statyczne

Let the fight begin !

Singletone , namespace i metody statyczne dążą do jednego rożnymi drogami tzn. izolacji spójnej logiczni części kodu który nie potrzebuje być uruchomiany w osobnych instancjach.

Sigletone został opisany w wielu różnych artykułach np.
http://en.wikipedia.org/wiki/Singleton_pattern
http://jalf.dk/blog/2010/03/singletons-solving-problems-you-didnt-know-you-never-had-since-1995/

Generalnie jest to wzorzec zachowania od którego się odchodzi ze względu na jego problemy z zasięgiem globalnym klasy i zmiennych. Obiekty potraktowane singletone’m są ciężkie w użyciu podczas programowania współbieżnego.

Świetnie tłumaczy to ten cytat

Let’s pick those apart a bit. The last one is eas­i­est: it is, by now, fairly com­mon knowl­edge that global
state is bad. We don’t like global vari­ables, we don’t like sta­tic class mem­bers, we don’t like any­thing that makes
it harder to iso­late bits of our code. Depen­dence on global state causes a lot of prob­lems: it hurts par­al­lelism,
as access to global muta­ble state gen­er­ally has to be seri­al­ized through the use of locks. It makes depen­den­cies
harder to detect and con­trol (any func­tion might silently decide to access our sin­gle­ton. 

Metody statyczne są pewna zmianą w stosunku do singletone. Możemy tworzyć instancje obiektu ( lub nawet nie ) i wszystkie będą korzystały z tych samych funkcji ( i danych jeśli pola są też statyczne ). Jednak nadal cierpimy tutaj na pewnego rodzaju globalność. Operujemy na tym samym zestawie danych i metod dla całego programu dostęp do składowych statycznych podczas programowania współbieżnego też musi być odpowiedni zarządzany. Jednak jest to wygodniejsza metoda od sigletone ze względu na usunięcie kroku incjalizacji obiektu.

Namespace http://pl.wikipedia.org/wiki/Przestrze%C5%84_nazw Jest ciekawym rozwiązaniem którego używamy codziennie programując w C++ ( przestrzeń nazw std ). Dzięki przestrzeniom nazw możemy uporządkować kod i oddzielić go od reszty nie powielając ilości klas w programie. Jest to też minimalne szybsze niż użycie klas.

Dlaczego powstał ten wpis ?

W pewnym swoim projekcie używałem bardzo dużo singletone. Po rozmowie z innym programistą zwrócił mi uwagę że jest to nie do końca dobre podejście dlatego szukałem lepszego rozwiązania aktualnie zamiast singletone łącze metody statyczne wraz z namespace , z naciskiem na namespace kod wygląda lepiej , jest czytelniejszy a i łatwiej się tym zarządza oczywiście wszystko w ramach rozsądku.

PS. Garść linków
http://stackoverflow.com/questions/519520/difference-between-static-class-and-singleton-pattern
http://stackoverflow.com/questions/1321352/why-choose-a-static-class-over-a-singleton-implementation
http://stackoverflow.com/questions/41590/how-do-you-properly-use-namespaces-in-c

Dodaj komentarz