• Nie Znaleziono Wyników

Obiektowe metody projektowania systemów

N/A
N/A
Protected

Academic year: 2021

Share "Obiektowe metody projektowania systemów"

Copied!
12
0
0

Pełen tekst

(1)

Obiektowe metody projektowania systemów

Abstract Factory

design pattern

(aka. Kit)

(2)

Wstęp:

Abstract Factory – wzorzec kreacyjny pracujący w zakresie obiektowym

Intencja – Udostępnić interfejs, służący tworzeniu rodzin powiązanych lub

zależnych obiektów bez

wyspecyfikowania konkretnej klasy.

(3)

Plan:

Powody utworzenia, motywacja

Zastosowanie

Przykłady implementacji w C++

Struktura i elementy składowe

Konsekwencje użycia

Powiązania z innymi wzorcami Bibliografia

(4)

Powody utworzenia, motywacja

Tworzenie obiektów klas produktów należących do tej samej rodziny

Potrzeba zmieniania całej

wyspecjalizowanej rodziny obiektów, przy zachowaniu tych samych algorytmów

Przykład: podmienianie kontrolek dla różnych platform (MFC, Motif)

(5)

Zastosowanie

System powinien być niezależny od tego jak produkty są tworzone,

komponowane i reprezentowane.

System może używać jednej z wielu rodzin produktów.

Potrzebujemy spójnych rodzin, które są zawsze razem.

(6)

Przykłady implementacji w C++

(z użyciem factory method i ew. singleton)

class AbstractFactory { public:

AbstractFactory(); // dla singletona to powędruje do private

// AbstractFactory* GetFactoryInstance(int* params); // dla singletona

// tu używamy FactoryMethod dla każdego produktu virtual Product1* MakeProduct1()

{ return new Product1; }

virtual Product2* MakeProduct2() { return new Product2; }

virtual Product3* MakeProduct3(int param1) { return new Product3(param1); }

virtual Product4* MakeProduct4(int param1, int param2) { return new Product4(param1, param2); }

//private:

//static AbstractFactory *instance; // przygotowanie pod singletona };

(7)

Struktura i elementy składowe

(8)

Konsekwencje użycia

Zalety. Izoluje konkretne klasy.

Czyni podmienianie rodzin produktów łatwiejszym.

Nakłania do zachowania konsystencji wsród produktów.

Ale! Dokładanie produktów do rodzin jest trudne.

(9)

Powiązania z innymi wzorcami

Abstract Factory jest często

implementowane z wykorzystaniem Factory Method. Jest to eleganckie i czytelne rozwiązanie. Ale ma wady…

Można użyć Prototype, zamiast FM.

Konkretne fabryki są często Singletonami

(10)

Podsumowanie:

Klasa Factory pozwala zbudować system w oparciu o funcjonalność rodzin

abstrakcyjnych produktów, z drugiej strony tworzyć odmienne realizacje w oddzielnych rodzinach.

Czyli mamy wysoce elastyczny i elegancki kod, z oddzieloną implementacją

szczegółów od meritum problemu.

(11)

Bibliografia:

Gamma E.,Helm R.,Johnson R., Vlissides J.: Design Patterns: Elements of Reusable Object-Oriented

Software, Addison-Wesley, 1995

http://c2.com/cgi/wiki?AbstractFactory

http://hillside.net/patterns/

http://en.wikipedia.org/wiki/Abstract_factory_pattern

Alexandrescu A.: Modern C++ Design, Addison- Wesley, 2001

http://sourceforge.net/projects/loki-lib/

(12)

...i to by było tyle

na dzisiaj!

Cytaty

Powiązane dokumenty

Adapter stanowi przykład niezwykle użyte- cznego wzorca projektowego, którego działanie polega na dostosowywaniu interfejsu istniejących już obiektów do interfejsu,

 Proces konstruowania musi zezwalać na różne reprezentacje

Na przykład użytkownik interfejsu narzędzi zawiera obiekty jako przyciski i menu, które doprowadzają żądania odzewu do użytkownika wejściowego.. Ale narzędzia nie mogą

dać przy tym użytkownikowi możliwość podstawienia swojej wyspecjalizowanej wersji. CreateFileDialog zamiast. zwykłego dialogu otwarcia pliku da nam dialog z podglądem

•Każdy observer jest powiadamiany o zmianie w danych w obiekcie subject.. •W odpowiedzi na powiadomienie o zmianie observer wysyła zapytanie w celu synchronizacji własnych danych

Można zastosować atrybuty w obydwu powiązanych klasach, ale wtedy trzeba dbać o ich aktualizację.. Daniluk (Wydział Fizyki)

◮ w przypadku, w którym parametrem jest referencja do obiektu, możliwe jest realizowanie przez daną metodę operacji na wskazywanym obiekcie: do metody przekazywana jest

// utworzono tablicę 10 referencji typu String, należy dla każdego elementu tablicy przydzielić pamięć.  Przydział pamięci na elementy obiektowe tablicy