Obiektowe metody projektowania systemów Abstract Factory design pattern (aka. Kit)
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.
Plan: Powody utworzenia, motywacja Zastosowanie Przykłady implementacji w C++ Struktura i elementy składowe Konsekwencje użycia Powiązania z innymi wzorcami Bibliografia
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)
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.
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 };
Struktura i elementy składowe
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.
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
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.
Bibliografia: Gamma E.,Helm R.,Johnson R., Vlissides J.: Design Patterns: Elements of Reusable Object-Oriented Software, Addison-Wesley, Alexandrescu A.: Modern C++ Design, Addison- Wesley,
...i to by było tyle na dzisiaj!