Forum Programowanie c++, delphi Ostatnio aktywny: Nigdy
Nie zalogowany [Zaloguj ]
Pokaż koniec
Wersja do druku | Zapisz | Dodaj do Ulubionych   Wyślij nową wiadomość Sonda:
Autor: Temat: Wzorzec Singleton i Java
hellsource
Coder
***


Avatar


Postów: 132
Zarejestrowano: 17-12-2005
Offline


[*] wysłano w 24-1-2007 o godz. 23:06 Odpowiedz cytując
Wzorzec Singleton i Java



Wstęp.

W ostatnim czasie w środowisku programistów bardzo popularnym tematem stały się wzorce projektowe. Niezliczone ilości artykułów i książek poruszają ten bardzo ciekawy temat, ale nie każda publikacja jest wystarczająco dobrze i przystępnie napisana. Postanowiłem sprostać tym wymaganiom i napisać cykl artykułów traktujących o wzorcach projektowych w Javie.

Czym są wzorce projektowe?

Samo słowo ‘wzorzec’ oznacza pewien sposób postępowania lub technikę wykorzystywaną w pewnych sytuacjach. Wraz z rozwojem języków programowania wzorce stawały się coraz bardziej popularne. Wzorce projektowe, jako sprawdzone metody postępowania w określonych przypadkach, były efektem wielu testów i lat doświadczeń zawodowych programistów. Aktualnie wzorce są często wykorzystywane w wielu aplikacjach i każdy programista powinien posiadać umiejętność ‘czytania’ danego wzorca.

W wielu książkach możemy natrafić na próbę klasyfikacji wzorców projektowych. Niektórzy starają się podzielić je np. według celu. Osobiście jestem przeciwnikiem jakichkolwiek podziałów wzorców i w tym artykule będę się tego trzymał. Uważam że każdy programista może dostosować wzorzec do swoich potrzeb i używać go według własnych upodobań

1.Wzorzec Singleton

Wyobraźmy sobie sytuację w której piszemy program odpowiedzialny za modelowanie ruchu planet w układzie słonecznym. Przyjmijmy także że posiadamy klasy ‘Planeta’ i ‘Słońce’. Oczywiście obiektów ‘Planeta’ może być wiele, ale z drugiej strony warto ograniczyć ilość obiektów ‘Słońce’ do jednej sztuki, nie ograniczając dostępu do tego obiektu. Właśnie tutaj pojawia się główna funkcjonalność wzorca Singelton – kod który jest zgodny z tym wzorcem pozwala utworzyć tylko jedna instancję danej klasy, zapewniając do niej nieograniczony dostęp.

Jak utworzyć klasy singelton? Istnieje kilka sposobów które postaram się teraz przedstawić:

a)


Kod:
public class Slonce
{

Private static slonce = New Slonce();

Private Slonce() {};

Public static Slonce returnSlonce()
{
return slonce;
}

}



Opis: Jak widać została utworzona statyczna składowa ‘slonce’, do której dostęp mamy tylko i wyłącznie przez metodę returnSlonce. Gwarantuje to nam istnienie tylko jednej instancji klasy ‘Slonce’. Inne obiekty tego typu nie mogą zostać tworzone ponieważ konstruktor klasy oznaczony jest jako ‘private’.

Ale w związku z poprzednim przykładem nasuwa się pytanie – czy istnieje możliwość tworzenia obiektu dopiero podczas pierwszego wywołania klasy? Oczywiście że tak.

b)


Kod:
public class Slonce
{

Private static slonce;

Private Slonce() {};

Public static Slonce returnSlonce()
{
If(slonce == null)
{
slonce = new Slonce();
}
return slonce;
}
}



Opis: Ten przykład nie różni się wiele od poprzedniego. Statyczna zmienna ‘slonce’ jest inicjalizowana dopiero w trakcie odwołania się do klasy ‘Slonce’ przez metodę ‘returnSlonce’. Praktyka ta znana jest pod nazwą „lazy initialization”.

Przedstawione powyżej sposoby są pewną podstawą na której opieramy większość klas korzystających ze wzorca Singleton. Należy teraz pomyśleć czy operacje które wykonywaliśmy wcześniej są wystarczające do utworzenia klasy opartej na wzorcu Singleton.

Przemyślmy następującą sytuację: piszemy program korzystający z wielu wątków (większość projektów…;) i w pewnym momencie nasza metoda returnSlonce() wywoływana jest przez dwie różne klasy w tym samym czasie. I mamy problem… który łatwo możemy rozwiązać za pomocą słowa ‘synchronized”:

c)


Kod:
public class Slonce
{
Private static slonce;

Private Slonce() {};

Public static synchronized Slonce returnSlonce()
{
If(slonce == null)
{
slonce = new Slonce();
}
Return slonce;
}
}


Opis: Metoda zdefiniowana jako ‘synchronized’ po wywołaniu blokuje dostęp do obiektu. Uniemożliwia to wywołanie danej metody w tym samym czasie przez różne klasy.

To chyba wszystkie najpotrzebniejsze informacje dotyczące wzorca Singelton. Osobiście uważam, że akurat ten wzorzec jest jednym z ciekawszych. Co więcej, można go łatwo przyswoić i szybko zacząć wykorzystywać w swoich projektach.

hellsource,
hellsource@gmail.com




Pokaż profil użytkownika Pokaż wszystkie wiadomości użytkownika Użytkownik U2U
Wyślij nową wiadomość Sonda:


Pokaż początek

Sitemap
Copyright © 2005-2007 by coding-portal.com
Programowaniedla każdego. Programowanie w c++, java, delphi, pascal, perl oraz innych językach. Tworzenie stron w html, xhtml, php z użyciem mysql, css oraz ich pozycjonowanie. Zapraszamy do udziału w życiu naszego forum!
[zapytań: 16]
[PHP: 66.6% - SQL: 33.4%]