-
Koziołek [brat Javowiec]
prawda :) zapomniałem
wystarczy ze twoje połączenia będą musiały dziedziczyć po jakiejś klasie zawierającej już statyczną listę połączeń lub co gorsza jakaś klasa będzie dziedziczyła po twoich połączeniach. Wtedy qpa. wszystkie klasy w całym drzewie będą miały wspólna pulę połączeń. W razie błędu będzie ciężko dojść co i jak :) Po singletonie niemożna dziedziczyć więc połączenia nie będą "wyciekać" przez klasy potomne.
Wiem że można uczynić klasę final, ale chyba nie o to chodzi... -
Maciek Makowski
> public ConnectionPoolSing getInstance(){
Zapomniales o jeszcze jednej waznej rzeczy: getInstance() musi byc statyczna.
> Z tego co wiem singleton ma tą przewagę nad klasą statyczną,
> że może dziedziczyć po jakiejś klasie lub implementować jakiś interfejs.
> [...]
Teoretycznie tak. Ale w praktyce, zeby dostac singletona i tak musimy odwolac sie do _statycznej_ metody getInstance(), tak ze cale to "programowanie do interfejsow" i "uniezaleznienie sie od implementacji" w tym momencie diabli biora. -
KosciaK
Ale dlaczego niby diabli biorą?
getInstance() zwraca obiekt tej klasy i tylko pilnuje by zwrócić zawsze ten sam. Jedyna różnica do nie-singletonu to statyczne getInstance() zamiast publicznego konstruktora. Nic nie tracimy z implementowania czy dziedziczenia.
InterfejsX x = KlasaImplementującaX.getInstan ce();
Równie dobrze (przynajmniej tak mi się zdaje) przy wielu różnych implementacjach możemy nie robić klas implemetujących singletonami tylko pilnowanie by stworzony i zwracany był tylko jeden obiekt danej klasy zlecić klasie fabrykującej. -
Maciek Makowski
Jak czesto bedziemy wywolywali to getInstance()?
Zmierzam do tego, ze jesli w wielu miejscach, to znaczy, ze i tak mamy na sztywno zakodowana zaleznosc od KlasaImplementujacaX -- nie ma przewagi nad metodami statycznymi. Jesli zas tylko w niewielu miejscach (jednym miejscu?), to znaczy, ze w naszej aplikacji starannie kontrolujemy tworzenie obiektow KlasaImplementujacaX. A jesli kontrolujemy, to mozemy sami zadbac o to, zeby byl tylko jeden, bez narzucania niepotrzebnych ograniczen w samej implementacji tej klasy. -
-
Koziołek [brat Javowiec]
a później przyjdzie jakiś nowy pracownik i już nie będziemy kontrolować co się dzieje z naszymi obiektami. -
Koziołek [brat Javowiec]
>KosciaK napisał
>
>InterfejsX x = KlasaImplementującaX.getInstan ce();
>
a po co tak?
Nie łatwiej przez JavaBeans i metody ustawiające. Wtedy nawet nie trzeba rekompilować klasy :)
-
Maciek Makowski
>a później przyjdzie jakiś nowy pracownik i już nie
>będziemy kontrolować co się dzieje z naszymi obiektami.
Przyjdzie czy nie przyjdzie -- nieistotne. Mozliwe sa dwie sytuacje:
1. kontrolujemy tworzenie obiektow -> nie potrzebujemy wzorca singletona, bo mozemy (i powinnismy!) stworzyc jeden tylko obiekt w jednym miejscu kodu
2. nie kontrolujemy tworzenia obiektow (np. jak przyjdzie ten pracownik i cos rozgrzebie) -> mamy statyczne zaleznosci w kodzie -> singleton nic nam nie daje, mozna rownie dobrze uzyc metod statycznych.
-
bartkiller
"1. Trudność singletona leży nie w jego implementacji, a w znalezieniu miejsca w którym można go wykorzystać. "
bzdura. mogę Ci znaleźć N+1 sytuacji, w których można wykorzystać singletona - przecież w zasadzie można wszystko pisać tylko singletonami (programowanie proceduralne z przestrzeniami nazw). Trudność polega na tym, żeby wiedzieć, w których z tych miejsc jednak nie należy z niego korzystać. -
Koziołek [brat Javowiec]
>bartkiller napisał
>"1. Trudność singletona leży nie w jego implementacji, a
>w znalezieniu miejsca w którym można go wykorzystać. "
>
>bzdura. mogę Ci znaleźć N+1 sytuacji, w których można
>wykorzystać singletona - przecież w zasadzie można
>wszystko pisać tylko singletonami (programowanie
>proceduralne z przestrzeniami nazw). Trudność polega na
>tym, żeby wiedzieć, w których z tych miejsc jednak nie
>należy z niego korzystać.
OK. nie wyraziłem się dokładnie. w mojej wypowiedzi można = należy -
spec
>bartkiller napisał
>"1. Trudność singletona leży nie w jego implementacji, a
>w znalezieniu miejsca w którym można go wykorzystać. "
>
>bzdura. mogę Ci znaleźć N+1 sytuacji, w których można
>wykorzystać singletona - przecież w zasadzie można
>wszystko pisać tylko singletonami (programowanie
>proceduralne z przestrzeniami nazw). Trudność polega na
>tym, żeby wiedzieć, w których z tych miejsc jednak nie
>należy z niego korzystać.
dodatowo dodam Bart, ze singleton jest dalej po to zeby ladnie sie kod synchronizowal miedzy stanami, i tylko po to, bo reszte mozna zrobic funckjami statycznymi, ale inicjalizacja musi byc zapewniona w kontekscie stanow, dlatego dobrze je uzywac tam gdzie mamy do czeynienia blisko ze input output, baza danych wlasnie.
a w praktyce mozna tez powiedziec ze singleton dalej latwo zmienic replacem na normalny obiekt :D
(co ja tak napieram dzisiaj o tych stanac???ble)
-
Maciek Makowski
>dodatowo dodam Bart, ze singleton jest dalej po to zeby
>ladnie sie kod synchronizowal miedzy stanami [...] ale
>inicjalizacja musi byc zapewniona w kontekscie stanow
A konkretnie? Jaki kod z jakim ma się synchronizować? Między jakimi stanami? Inicjalizacja czego? Poproszę na przykładzie z tą pulą połączeń.
Może masz na myśli coś bardzo mądrego, ale z tego postu niestety zupełnie to nie wynika.
- Przeglądaj grona w kategorii Internet i Komputery
- Przeglądaj grona w okolicy Warszawa
- Załóż własne grono tematyczne
- Zostań moderatorem
Podobne Tematy
|
|
Wszystko co związane z programowaniem w Java (J2EE, JSP, JDBC, itd) test
Miejsca grona (1)
-
Kino Luna ul. Marszałkowska, Warszawa
www.kinoluna.pl kino.luna@maxfilm.com.pl 22 621 78 28
- Dodaj miejsce

