Co oznacza singleton?

Odpowiedz Nowy wątek
2015-01-04 19:45
AZA
0

Czy może ktoś wytłumaczyć mi co oznacza singleton?

Pozostało 580 znaków

2015-01-04 19:47
1

http://pl.wikipedia.org/wiki/Singleton_%28wzorzec_projektowy%29

Takie odpowiedzi należy dawać poprzez: http://bit.ly/y1twgv ;P - _13th_Dragon 2015-01-04 19:50

Pozostało 580 znaków

2015-01-04 19:50
AZA
0

Byłem już na Wiki ale nadal nie do końca rozumiem. Czy możesz wytłumaczyć mi jak osobie kompletnie początkującej?

Pozostało 580 znaków

2015-01-04 19:53
0

Osobie początkującej to wytłumaczyłbym to tak:

"Singleton – kreacyjny wzorzec projektowy, którego celem jest ograniczenie możliwości tworzenia obiektów danej klasy do jednej instancji oraz zapewnienie globalnego dostępu do stworzonego obiektu."

Pozostało 580 znaków

2015-01-04 19:55
9

To jest taka konstrukcja kiedy potrzebujesz tylko jedną instancję jakiegoś obiektu w całej aplikacji. Przykładem może być połączenie z bazą danych, albo np. timer/scheduler który co pewien czas uruchamia jakieś akcje. Zasadniczo w całej aplikacji nie potrzeba tych obiektów więcej, bo jeden jest w stanie wszystko obsługiwać. Singleton ułatwia "pozyskiwanie" takiego obiektu (więc w prosty sposób z dowolnego miejsca możesz się odwołać do tej bazy danych na przukład) i kontroluje też żeby nikt przypadkiem nie tworzył takich obiektów. Może tak być że mamy ograniczoną liczbę połączeń z bazą danych i bardzo nie chcielibyśmy żeby ktoś nam nagle utworzył ich 1000 ;]


Na PW przyjmuje tylko (ciekawe!) zlecenia. Masz problem? Pisz na forum, nie do mnie.

Pozostało 580 znaków

2015-01-04 20:27
4

Globalna zmienna w obiektowym świecie.

Pozostało 580 znaków

2015-01-04 22:36
0

Prosty przykład pisany w niczym :D Ma to tylko pokazać zasadę działania

class Klasa{
    private static obj = null; //referencja do jedynego obiektu statyczna
 
    private zmienna; // pole klasy
 
    private Klasa(){ this.zmienna = 2; } // konstruktor prywatny tutaj robisz sobie obiekt tej klasy ustawiasz zmienne początkowe i takie tam
 
    public static getObj() { // metoda która pozwoli ci się dostać do obiektu
 
        if(Klasa.obj == null){ //jeśli nie masz jeszcze obiektu tej klasy
            Klasa.obj = new Klasa();// stwórz go
        } 
        return Klasa.obj;//i zwróć obiekt
    }
}

potem możesz się odwołać do tego tak

Klasa.getObj().zmienna = 5;

Pozostało 580 znaków

2015-01-05 00:26
2

Moja definicja: singletony to zło, którego zwykle pragniesz uniknąć.

Jest to zmienna globalna na dopalaczu, i chociaż dopalacze są kuszące, to jednak nie zmienia to tego, że jest to zmienna globalna, czyli zło (którego czasem nie da się uniknąć).

Singleton ułatwia "pozyskiwanie" takiego obiektu

no dobra, ale równie dobrze można sobie "gdzieś tam" utworzyć ten obiekt globalny reprezentujący Połączenie z bazą danych i potem przekazywać te Połączenie dalej na zasadzie wstrzykiwania zależności, coś w tym rodzaju:

connection = new DBConnection();
customerTable = new DBTable(connection);
productTable = new DBTable(connection);

tym sposobem też połączenie będzie jedno, a przy okazji nie będziemy korzystać ze zmiennej globalnej (czyli moduł/klasa będą bardziej niezależne), a także będziemy mogli podstawić obiekt innej klasy (np. przy testowaniu albo jeśli będziemy chcieli wprowadzić jakieś zmiany w programie, np. wprowadzić obsługię wielu połączeń z wieloma bazami danych). Nie mówię, że singletony nie przydają się, ale póki co widzę mało zalet, w porównaniu chociażby z dependency injection.

dodanie znacznika <code class="java"> - @furious programming


((0b10*0b11*(0b10**0b101-0b10)**0b10+0b110)**0b10+(100-1)**0b10+0x10-1).toString(0b10**0b101+0b100);
edytowany 1x, ostatnio: furious programming, 2015-01-05 00:32
Prosiłem Cię już, żebyś wstawiał kod w znaczniki kolorujące składnię; - furious programming 2015-01-05 00:32
rzecz w tym, że to miał być pseudokod. Ale dobra. - LukeJL 2015-01-05 08:16
Pseudokod też może być kolorowy ;) - furious programming 2015-01-05 12:03

Pozostało 580 znaków

2015-01-05 00:30
0

@LukeJL ależ oczywiście że kontenery IoC (bo jak rozumiem to masz na myśli w kontekście DI) są lepsze! Tylko że kontenery IoC to są relatywnie nowe zabawki. Wcześniej ich zwyczajnie nie bylo i trzeba było pisac singletony i service locatory. Młody jesteś to mało widziałeś :P


Na PW przyjmuje tylko (ciekawe!) zlecenia. Masz problem? Pisz na forum, nie do mnie.
nie wiem czy takie nowe, już 11 lat temu Fowler o tym pisał: http://martinfowler.com/articles/injection.html . Inna rzecz, że takie innowacje rozprzestrzeniają się dość wolno. - LukeJL 2015-01-05 08:13

Pozostało 580 znaków

2015-01-05 09:33
BFF
0

Po co używać singleton jak można zrobić klasę statyczną?

Pozostało 580 znaków

2015-01-05 09:38
gsfdgxb
1

bo klasy statycznej nie można dziedziczyć, nie można wydzielić interfejsu i zamockować do testów

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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