• Nie Znaleziono Wyników

Obiektowe metody projektowania systemów

N/A
N/A
Protected

Academic year: 2021

Share "Obiektowe metody projektowania systemów"

Copied!
15
0
0

Pełen tekst

(1)

Obiektowe metody projektowania systemów

Factory Method

design pattern

(aka. Virtual Constructor)

(2)

Wstęp:

Factory Method – wzorzec kreacyjny pracujący w zakresie klasowym

Intencja – Zdefiniować interfejs dla tworzenia obiektu, ale pozwolić

podklasom skonkretyzować, którą klasę instancjalicować.

(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

Fabryki obiektów, a operator new

Znajomość tylko klasy abstrakcyjnej

Ale tworzenie podklas konkretnych

Zrzucenie odpowiedzialności na potomka

Przykład: uelestyczniene frameworks

(5)

Zastosowanie

Implementacja klasy nie zawiera

informacji o tym co dokładnie tworzymy tylko kiedy.

Klasa wymaga by jej podklasy

wyspecyfikowały jaki obiekt będzie potrzebny.

Klasa oddelegowuje odpowiedzialność do jednej z klas pomocniczych.

(6)

Przykłady implementacji w C++

(parametryzowane factory method)

// Parametryzowane factory method.

class Creator { public:

virtual Product* Create(ProductId);

};

Product* Creator::Create (ProductId id) { if (id == MOJE) return new MyProduct;

if (id == TWOJE) return new YourProduct; // i.t.d. dla innych produktów...

return 0;

}

Product* MyCreator::Create (ProductId id) { if (id == TWOJE) return new MyProduct;

if (id == MOJE) return new YourProduct; // N.B.: zamieniłem TWOJE i MOJE if (id == ICH) return new TheirProduct;

return Creator::Create(id); // wywołane jeśli wszystko inne zawiedzie }

(7)

Przykłady implementacji w C++

(użycie szablonów)

// Użycie szablonów by uniknąć podklasowywania.

class Creator { public:

virtual Product* CreateProduct() = 0;

};

template <class TheProduct>

class StandardCreator: public Creator { public:

virtual Product* CreateProduct();

};

template <class TheProduct>

Product* StandardCreator<TheProduct>::CreateProduct () {

return new TheProduct;

}

class MyProduct : public Product { public:

MyProduct(); // ...

};

StandardCreator<MyProduct> myCreator;

(8)

Struktura i elementy składowe

(9)

Konsekwencje użycia

Zalety. W kodzie nie musimy zawierać odwołań do specyficznych dla

zastosowania klas. Kod jest

abstrakcyjny i ogólny, ale działa na konkretnych, zdefiniowanych przez użytkownika klasach produkowanych.

(10)

Konsekwencje użycia

Zalety. Możemy zaimplementować tworzenie domyślnego produktu, ale

dać przy tym użytkownikowi możliwość podstawienia swojej wyspecjalizowanej wersji. (np.. CreateFileDialog zamiast

zwykłego dialogu otwarcia pliku da nam dialog z podglądem pliku graficznego)

(11)

Konsekwencje użycia

I wady… Potrzeba podklasowania Creator dla każdego kolejnego

ConcreteProduct. Chyba, że użyjemy szablonów…

(12)

Powiązania z innymi wzorcami

Abstract Factory jest często

implementowane z wykorzystaniem Factory Method. Jest to eleganckie i czytelne rozwiązanie.

Prototype – podobieństwa i różnice

Metody-fabryki są często wywoływane z Template Method.

(13)

Podsumowanie:

Klasa Creator pozwala podklasom

zdefiniować konkretna metodę-fabrykę, a ona produkuje konkretny produkt,

będący elementem pewnej nadklasy.

Dostajemy wysoce elastyczny i

elegancki, czytelny kod, choć czasem tę samą funkcjonalność możnaby uzyskać żonglując konstruktorami.

(14)

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?FactoryMethod

http://hillside.net/patterns/

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

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

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

(15)

...i to by było tyle

na dzisiaj!

Cytaty

Powiązane dokumenty

Widać, że w grupie CIU proporcja pozytywnych wyników SC5% jest wyższa niż w pozostałych grupach, które nie różnią się istotnie między sobą. Iloraz szans pozytywnego

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

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ą

•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

 Strategia umożliwia zdefiniowanie rodziny algorytmów realizujących to samo zadanie, ale różniących

Włącz konspekt numerowany (numerację rozdziałów) tak, by akapity złożone stylem &#34;Nagłówek 1&#34; były numerowane jako kolejne rozdziały, a te złożone stylem