Wzorce projektowe

/Tag:Wzorce projektowe

Wzorce Projektowe, źródło książkowe

Znajomość wzorców projektowych zdaje się być jedną z ważniejszych umiejętności posiadanych przez wprawnego programistę. Dlaczego jest zatem tak, że nie każdy programista je zna? Składa się na to kilka współczynników. Po pierwsze: wzorce wymagają pewnego doświadczenia programistycznego, aby podczas nauki można było znaleźć dla nich praktyczne zastosowanie. Po drugie: oryginalna książka bandy czworga jest śmiertelnie nudna i nauka wzorców z tej książki wymaga solidnego samozaparcia. Te czynniki sprawiają, że nawet jak wzorce są omawiane na studiach, to studenci w większym stopniu o nich zapominają. Zostaje zatem samonauczanie podczas swojej pracy – poznając wzorce szukamy dla nich praktycznego zastosowania w obecnym projekcie. Gdzie jednak szukać dobrego źródła na ten temat? Jeżeli szukamy wśród pozycji książkowych to godną polecenia pozycją jest: Head First Design Patterns. Mimo, iż jest to chyba jedyna pozycja na polskim rynku dotycząca tego tematu, to zdecydowanie jest godna polecenia. Książka pisana w dość luźnym stylu wyjaśnia stosowanie wzorców na praktycznych przykładach. Budując krok po kroku fragmenty kodu czytelnik widzi te same funkcjonalności zarówno z wykorzystaniem wzorców jak i bez nich. Jest to bardzo dużą zaletą książki, bo początkowi programiści mają największy problem ze znalezieniem miejsca na wzorzec w swoich projektach. Po lekturze tej książki na pewno będzie to łatwiejsze. […]

By | Sierpień 30th, 2010|Categories: Programowanie, Wzorce Projektowe|Tags: , |0 Comments

Wzorce projektowe: Visitor

W aplikacjach często wykorzystuje się kolekcje takie jak List, Set, Map czy pochodne. W kolekcjach tych przetrzymuje się obiekty różnego typu. Nie jednokrotnie także buduje się kolekcje o budowie hierarchicznej, np. za pomocą wzorca Composite. Są sytuajcje, gdy musimy przeiterować się po takiej kolekcji w jakimś celu i wykonać na każdym obiekcie jakąś metodę. Np. w sytuacji przeindeksowania, lub przywrócenia utraconych danych. Problem w tym, że kolekcja jak wspomniano może zawierać kilka różnych obiektów i każdy powinien być traktowany inaczej. Korzystanie w takiej sytuacji z instanceof nie jest do końca zgodne z myślą projektowania obiektowego. Zatem co? Zatem wzorzec Visitor. Visitor jest wzorcem operacyjnym, który potrafi wykonać daną operację na całej strukturze obiektów. Visitor pozwala na zdefiniowanie nowych operacji na elementach struktury, bez zmiany klas tych elementów. […]

By | Luty 12th, 2009|Categories: Wzorce Projektowe|Tags: , , |0 Comments

Wzorce projektowe: Memento

Memento jest wzorcem, którego wykorzystuje w sytuacji gdy musimy zamrozić stan obiektu w celu jego późniejszego wykonania. Na przykład tak działa Undo. Drugim częstym sposobem na wykorzystanie wzorca memento jest zapamiętywanie wyników zapytań bazy danych w celu ich ponownego późniejszego wykoniania. Zwłaszcza gdy wykonanie zapytań jest bardzo zasobożerne. Wzorzec memento składa się z trzech głównych obiektów: Originator: klasa, której stan ma być przechowywany, musimy w niej implementować metody zapisujące i odczytujące stan z obiektu Memento Memento: klasa, w która potrafi przechować wszystkie dane z Originatora, które muszą być utrwalone. Caretaker: jest klasą która przechowuje kolekcję memento i udostępnia metody do zapisu i odczytu. Przypuśmy że mamy klasę (Originator), która ma pole State pole to musi być utrwalane. Tworzymy zatem drugą klasę (Memento) która również posiada pole State. W momencie gdy potrzebujemy utrwalenia wywołujemy metodę saveToMemento Originatora. Metoda ta tworzy obiekt Memento z obecną wartością pola state Originatora. następnie nowo utworzone Memento jest wysyłane do Caretakera w celu utrwalenia. […]

By | Luty 11th, 2009|Categories: Wzorce Projektowe|Tags: , , |0 Comments

Wzorce projektowe: Interpreter

Interpreter jest wzorcem projektowym, którego zadaniem jest interpretacja poleceń innego języka. Dany język rokładany jest na części gramatyczne i potem na zorientowaną obiektowo hierarchię. Interpreter nie jest właściwie niczym innym jak wzorcem Kompozyt, tylko że ma trochę inną rolę – reprezentuje reguły gramatyczne. W niektórych przypadkach wzorzec Interpreter może zwiększyć funkcjonalność wzorca Kompozyt. Częstym przypadkiem używania wzorca jest interpretacja zasad. Interpreter składa się : Context: który przetrzymuje dane, które powinny poddać się interpretacji, Abstract Expression: klasa abstrakcyjna która interpretuje polecenia, …. Expression – konkretne klasy, które interpretują treść Contextu dla poszczególnych przypadków. Abstract Expression i konkretne implementacje tworza wzorzec Template Method. […]

By | Luty 11th, 2009|Categories: Wzorce Projektowe|Tags: , , |0 Comments

Wzorce projektowe: Mediator

Wzorzec operacyjny Mediator jest wykorzystywany do skupiania złożonych procedur komunikacji i sterowania w środowisku powiązanych obiektów. Obiekty w systemie zamiast komunikować się między sobą bezpośrednio robią to poprzez klasę Mediatora – nie muszą wtedy wiedzieć o swoim własnym istnieniu bezpośrednio. Wysyłają informację do mediatora, a on przekaże go do obiektu, który ma być celem żądania. Pozwala to na łatwą przyszłą modyfikację aplikacji, ponieważ wszystkie wpólne relacje są w jednym miejscu. Sprawdźmy działanie programu, który oddziela obiekt wysyłający informacje, od obiektu który jest odbiorcą tych wiadomości. […]

By | Luty 10th, 2009|Categories: Wzorce Projektowe|Tags: , , |0 Comments

Wzorce projektowe: Iterator

Iterator jest operacyjnym wzorcem projektowym, którym zapewnia metodę dostępu sekwencyjnego do elementów obiektu zagregowanego bez ujawniania jego reprezentacji wewnętrznej. Obecnie od czasu java 5 i pojawieniu się typów generycznych wzorzec iteratora stracił na wadze. Typy generyczne pełnią kontrolę nad zwracanymi obiektami. Każda kolekcja też, posiada metodę iterator, która zwraca jej iterator. Jeżeli chcemy więc użyć własnego, najlepiej w tym celu udekorować kolekcję, dodając funkcjonalności do iteratora. […]

By | Luty 9th, 2009|Categories: Wzorce Projektowe|Tags: , , |0 Comments

Wzorce projektowe: Flyweight

Flyweight jest strukturalnym wzorcem projektowym, którego zadaniem jest zmniejszenie ilości instancji klas w aplikacji. Jest bardzo zbliżony do Singleton’a i często Singleton jest wykorzystywany we wzorcu Flyweight. Czasami zdaża się, że potrzebujemy na prawdę wielkiej ilości małych obiektów. Np. rysując zawartość folderu, możemy stworzyć obiekt katalogu lub pliku dla każdego obecnego w systemie. Może to doprowadzić do niepotrzebnego zuzycia zasobów. Te obiekty tak na prawdę nie różnią się wiele, ikonka taka sama tylko nazwa inna. W takiej sytuacji wykorzystuje się wzorzec Flywieght. Jego zadaniem jest stworzenie jednego obiektu, którego dane są delegowane do innego miejsca. Zamiast tworzyć kilkaset małych obiektów, tworzy się jeden, a jako paramter podaje się to co jest zmienne. Tworzy się jedną instancję dla rodzaju obiektu. Więc np, folder i folder zaznaczony (który ma inną ikonkę) to dwa różne obiekty. […]

By | Luty 9th, 2009|Categories: Wzorce Projektowe|Tags: , , |0 Comments

Wzorce projektowe: Chain of Responsibility

Wzorzec projektowy Chains of Responsibility prowadzi do utworzenia łańcucha obiektów, które analizują żadanie. Analiza przeprowadzana jest kolejno przez każdy z nich. Obiekt może zapewnić obsługę żądania lub przekazuje to żądanie dalej, lub to i to.

[…]

By | Luty 9th, 2009|Categories: Wzorce Projektowe|Tags: , |0 Comments

Wzorce projektowe: State

Wzorzec State jest wzorcem operacyjnym, który posiada wiele implementacji i może się przełączać pomiędzy nimi podczas działania programu. Zmiana może być spowodowana interakcją użytkownika lub też automatycznie przez klasę kliencką jako odpowiedź na wykonaną akcję. Korzystanie z wzorca eliminuje wiele instrukcji warunkowych z kodu, które uzależnieją wykonane operacji od odpowiedniego warunku. W state takie warunki przeniesione są do oddzielnych klas. […]

By | Luty 8th, 2009|Categories: Wzorce Projektowe|Tags: , , |0 Comments

Wzorce projektowe: Proxy

Proxy jest strukturalnym wzorcem projektowym wykorzystywanym do reprezentowania skomplikowanego obiektu lub obiektu, którego utworzenie wymaga dużego nakładu czasu, za pomocą obiektu prostego. Jeżeli tworzenie obiektu jest czasochłonne lub zasobożerne, Proxy pozwala odłożyć akt tworzenia tego obiektu na czas, w którym ten obiekt rzeczywiście będzie potrzebny. Proxy ma taki sam interfejs jak obiekt którego reprezentuje ( a tak właściwie to nie muszą implementować tego samego interfejsy – wymagane jest tylko aby proxy posiadało definicje wszystkich metod obiektu docelowego). Kiedy pełny obiekt zostanie stworzony, Proxy przekazuje do niego wszystkie wywołania metod. Proxy stosuje się: kiedy obiekt potrzebuje dużo czasu na załadowanie, kiedy obiekt znajduje się na odległej maszynie i ładowanie go przez sieć może być długotrwałe, kiedy chcemy aby prawa dostępu do obiektu były ograniczone – proxy sprawdza uprawnienia użytkownika, przed załadowaniem odpowiedniego obiektu. […]

By | Luty 8th, 2009|Categories: Wzorce Projektowe|Tags: , , |0 Comments