12.07.2015 Views

Podsumowanie wzorców projektowych GoF

Podsumowanie wzorców projektowych GoF

Podsumowanie wzorców projektowych GoF

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

1. SingletonPrzeznaczenie (cytat z ksiki <strong>GoF</strong>):Gwarantuje, e klasa ma tylko jeden egzemplarz i zapewnia globalny dostp do niego.Przeznaczenie (cytat z fluffycat):Klasa udostpnia jedyn instancj samej siebie.Opis: Przykład ilustruje współdzielenie jednej łyki. Łyka jest tylko jedna i w danej chwilimoe uywa jej tylko jedna osoba. Oznacza to jedzenie zupy przez wicej ni jedn osob zapomoc jednej łyki. Sytuacja nie do pomylenia w dobrej restauracji! Moe to te by np.łyeczka dedykowana do wsypywania cukru do herbaty umieszczona w cukiernicy. A to jujest powszechnie akceptowane, gdy si ni nie je!Problem: Jak zapewni unikalno egzemplarza łyeczki. Jak zapewni mechanizmudostpniania jej innym?Rozwizanie: Przez wprowadzenie pola statycznego i odpowiednie zarzdzanie jegowartoci. Wprowadzenie innej metody zamiast konstruktora klasy reprezentujcej łyk.Modyfikacje: mona korzystajc z tego samego mechanizmu zapewni istnienie jednego pojemnikana łyki zamiast tylko jendej łyki - wtedy pole theSpoon powinno by kolekcj a poletheSpoonIsAvaialable powinno by licznikiem uwzgldnienie wielowtkowoci przez uczynienie metody getTheSpoon() metodsynchronizowan dodanie zabezpieczenia przed skopiowaniem łyki metod clone() - wystrczyzdefiniowa własn metod clone() zgłaszajc wyjtek lub oddajcych referencj doistniejcego ju obiektu bez tworzenia kopii.Klasa główna:_DP_C_<strong>GoF</strong>_Singletonpackage pk.dydakt.to.dp.c.gof.singleton;public class _DP_C_<strong>GoF</strong>_Singleton {public static void main(String[] args) {System.out.println("First person getting the spoon");SingleSpoon spoonForFirstPerson = SingleSpoon.getTheSpoon();if (spoonForFirstPerson != null)System.out.println(spoonForFirstPerson);elseSystem.out.println("No spoon was available");System.out.println("");System.out.println("Second person getting a spoon");SingleSpoon spoonForSecondPerson = SingleSpoon.getTheSpoon();if (spoonForSecondPerson != null)System.out.println(spoonForSecondPerson);elseSystem.out.println("No spoon was available");System.out.println("");7

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!