Pobierz prezentację
Pobieranie prezentacji. Proszę czekać
OpublikowałDyta Biegaj Został zmieniony 11 lat temu
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
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
18
Struktura – diagram klas
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; } @Override 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!!
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; }
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; }
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ę!
Podobne prezentacje
© 2024 SlidePlayer.pl Inc.
All rights reserved.