Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

W ZORCE P ROJEKTOWE … czyli ktoś już rozwiązał Twoje problemy!

Podobne prezentacje


Prezentacja na temat: "W ZORCE P ROJEKTOWE … czyli ktoś już rozwiązał Twoje problemy!"— Zapis prezentacji:

1 W ZORCE P ROJEKTOWE … czyli ktoś już rozwiązał Twoje problemy!

2 Witamy w krainie wzorców projektowych (ang. Design pattern) - w inżynierii oprogramowania to uniwersalne, sprawdzone w praktyce rozwiązanie często pojawiających się, powtarzalnych problemów projektowych "Każdy wzorzec opisuje problem, który ciągle pojawia się w naszej dziedzinie, a następnie określa zasadniczą część jego rozwiązania w taki sposób, by można było zastosować je nawet milion razy za każdym razem w nieco inny sposób" definicja wzorca projektowego podana przez C. Alexander, S. Ishikawa, M. Silverstein w "A Pattern Language", Nowy York, Oxford University Press, 1977

3 Klasyfikacja Wzorce konstrukcyjne / kreacyjne Wzorce strukturalne Wzorce operacyjne / czynnościowe / behawioralne Wzorce klasowe Wzorce obiektowe

4

5 Wzorzec projektowy od środka Nazwa wzorca – skrót najlepiej opisujący wzorzec Problem – wyjaśnia o co chodzi, kiedy stosować dany wzorzec Rozwiązanie – przedstawia rozwiązanie problemu Konsekwencje – wady i zalety wzorca

6 Wybrane wzorce

7 Obserwator jak sprawić, by Twoje obiekty były zawsze dobrze poinformowane Wzorzec Obserwator definiuje pomiędzy obiektami relację jeden–do–wielu w taki sposób, że kiedy wybrany obiekt zmienia swój stan, to wszystkie jego obiekty zależne zostają o tym powiadomione i automatycznie zaktualizowane.

8 Kiedy stosujemy Jakaś abstrakcja ma dwa aspekty, jeden zależny od drugiego – kapsułkowanie umożliwia niezależne zmienianie i używanie tych obiektów Zmiana jednego obiektu wymaga zmiany innych i nie wiadomo ile obiektów trzeba będzie zmienić Obiekt powinien być w stanie powiadamiać inne obiekty, gdy chcemy uniknąć ścisłego powiązania tych obiektów

9 Konsekwencje Abstrakcyjne powiązanie pomiędzy Podmiotem a Obserwatorem Wsparcie dla rozsyłania komunikatów Nieoczekiwane uaktualnienia

10 Struktura – diagram klas

11 Jaja towarzyszą człowiekowi od początku jego istnienia!!(wikipedia.org)

12 Pomysł Krzysia

13 Miałbym pewien pomysł, ale nie myślcie, żeby był bardzo dobry. Kubuś Puchatek

14 Dekorator dekorowanie zachowania obiektów Wzorzec Dekorator pozwala na dynamiczne przydzielanie danemu obiektowi nowych zachowań. Dekoratory dają elastyczność podobną do tej, jaką daje dziedziczenie, oferując jednak w zamian znacznie rozszerzoną funkcjonalność.

15 Kiedy stosujemy Gdy chcemy dynamicznie i nie wpływając na inne obiekty dodać zobowiązanie do pojedynczych obiektów W wypadku zobowiązań, które mogą być cofnięte Gdy rozszerzanie przez definiowanie podklas jest niepraktyczne; definicja klasy może też być ukryta lub inaczej niedostępna, jeśli chodzi o tworzenie podklas.

16 Konsekwencje Większa elastyczność niż przy stosowaniu statycznego dziedziczenia Unikanie przeładowanych właściwościami klas na szczycie hierarchii Dekorator i jego komponent nie są identyczne Wiele małych obiektów

17

18 Struktura – diagram klas

19

20 public abstract class Jajko { protected String opis ="Jajo"; public String pobierzOpis () { return opis; } public class JajkoKurze extends Jajko { public JajkoKurze(){ super(); opis="Jajko Kurze"; } public abstract class DekoratorJaj extends Jajko { protected Jajko jajko; public abstract String pobierzOpis();} public class DWyklejanka extends DekoratorJaj { public DWyklejanka(Jajko j){ super(); jajko = j; public String pobierzOpis() { return jajko.pobierzOpis()+", Wyklejanka"; } }}

21 Jak wykorzystać Dekoratora do przystrojenia jaj?? public static void main(String[] args) { Jajko mojeJajko = new JajkoKurze(); System.out.println("Zwykle jajo: " + mojeJajko.pobierzOpis()); mojeJajko = new DFarby(mojeJajko); System.out.println("To jest moje jajko: " + mojeJajko.pobierzOpis()); Jajko jajkoMojegoBrata = new JajkoStrusie(); jajkoMojegoBrata = new DWosk(jajkoMojegoBrata); System.out.println("To jest jajko mojego brata: " + jajkoMojegoBrata.pobierzOpis()); Jajko jajkoMojejSiostry = new JajkoKurze(); jajkoMojejSiostry = new DFarby(new DWosk(new DWyklejanka(jajkoMojejSiostry))); System.out.print("A to jest jajo mojeje siostry: " + jajkoMojejSiostry.pobierzOpis()); }

22 Singleton obiekt jedyny w swoim rodzaju Wzorzec Singleton zapewnia, że dana klasa będzie miała tylko i wyłącznie jedną instancję obiektu i zapewnia globalny punkt dostępu do tej instancji.

23 Kiedy stosujemy Klasa musi mieć właśnie jeden egzemplarz, dostępny dla jej klientów Powinno być możliwe rozbudowanie tego jedynego egzemplarza poprzez definiowanie podklas, a klienci powinni móc używać rozszerzonego egzemplarza bez modyfikowania swojego kodu

24 Konsekwencje Kontrolowany dostęp do jedynego egzemplarza Mniejsza przestrzeń nazw Możliwe udoskonalanie operacji i reprezentacji Większa elastyczność, niż w wypadku operacji klasowych

25 Struktura – diagram klas

26 Klasyczna implementacja Singleton Public class Singleton{ private static Singleton unikalnaInstancja; private Singleton() {} public static Singleton pobierzInstance(){ if(unikalnaInstncja==null){ unikalnaInstancja = new Singleton();} return unikalnaInstancja; }

27 Singleton - wielowątkowość Singleton jako wzorzec jest szczególnie przydatny do zastosowań wielowątkowości. UWAGA: poprzednia standardowa wersja nie będzie działała!!

28

29 Rozwiązanie I public class Smerfetka { private static Smerfetka smerfetka; private Smerfetka(){} public static synchronized Smerfetka pobierzSmerfetke() { if (smerfetka==null){ smerfetka = new Smerfetka(); } return smerfetka; }

30

31 JVM pomoże nam w dostępie do Smerfetki!!! public class Smerfetka { private static Smerfetka smerfetka = new Smerfetka(); private Smerfetka(){} public static synchronized Smerfetka pobierzSmerfetke() { return smerfetka; }

32

33 Metoda podwójnego blokowania Najpierw sprawdzamy czy instancja naszego obiektu już została utworzona; jeśli nie WTEDY uruchamiamy synchronizacje metody. W ten sposób skorzystamy z synchronizacji tylko raz, podczas tworzenia obiektu

34 public class Smerfetka { private volatile static Smerfetka smerfetka = new Smerfetka(); private Smerfetka(){} public static Smerfetka pobierzSmerfetke() { if(smerfetka==null){ synchronized (Smerfetka.class){ if(smerfetka==null){ smerfetka = new Smerfetka(); } return smerfetka; }

35 Fabryka Abstrakcyjna tworzymy rodziny produktów Wzorzec Fabryka Abstrakcyjna dostarcza interfejs do tworzenia całych rodzin spokrewnionych lub zależnych od siebie obiektów bez konieczności określania ich klas rzeczywistych.

36 Kiedy stosujemy System powinien być niezależny od tego, jak jego produkty są tworzone, składane i reprezentowane System powinien być konfigurowany przy użyciu jednej z wielu rodzin produktów Rodzina związanych ze sobą obiektów - produktów jest zaprojektowana tak, by te obiekty były używane razem Chcemy dostarczyć bibliotekę klas produktów, ujawniając jedynie ich interfejsy, a nieimplementacje

37 Konsekwencje Odseparowanie klas konkretnych Łatwiejsza wymiana rodzin produktów Spójność produktów Utrudnione dołączanie nowych rodzajów produktów

38 Struktura – diagram klas

39 Jak NIE stosować wzorców projektowych Nie należy ich wykorzystywać byle jak Powinny być stosowane tylko wtedy, kiedy zapewniana przez niego elastyczność jest rzeczywiście potrzebna

40 Dziękujemy za uwagę!


Pobierz ppt "W ZORCE P ROJEKTOWE … czyli ktoś już rozwiązał Twoje problemy!"

Podobne prezentacje


Reklamy Google