Obiektowe metody projektowania systemów
Builder
design pattern
Wstęp:
Builder – wzorzec kreacyjny pracujący w zakresie obiektowym
Intencja – Rozdzielić konstrukcję złożonego obiektu od jego
reprezentacji, tak aby ten sam proces konstrukcji mógł tworzyć różne
reprezentacje.
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 złożonego obiektu reprezentującego zbiór danych
Potrzeba posiadania kilku możliwych reprezentacji danych
Mimo mnogości reprezentacji, jedna
metodyka tworzenia na podstawie danych
Przykład: uniwersalne parsery
Zastosowanie
Algorytm tworzenia złożonego obiektu powinien być niezależny od części
współtworzących obiekt oraz tego w jaki sposób on jest złożony.
Proces konstruowania musi zezwalać na różne reprezentacje obiektu
konstruowanego
Przykłady implementacji w C++
class Builder { public:
virtual void BuildComponent1() { }
virtual void BuildComponent2(int param1) { }
virtual void BuildComponent3(int paramA, int paramB) { } // to nie są abstrakcyjne metody, tylko puste, wirtualne - // dla możliwości nieimplementowania wybranych komponentów
// virtual Product* GetCompleteProduct() { return 0; }
// ^ dopiero dla konkretnego, wydziedziczonego Buildera !!!
protected:
Builder(); // nie chcemy instancjalizować naszej pseudoabstrackji };
Struktura i elementy składowe
Konsekwencje użycia
Zalety. Pozwala stosować różną wewnętrzną reprezentację.
Izoluje kod konstrukcji i reprezentacji.
Daje kontrolę nad rozłożeniem
tworzenia w czasie, w przeciwieństwie do innych konstrukcyjnych wzorców.
Powiązania z innymi wzorcami
Builder jest podobny do Abtract Factory w tym, że obydwa tworzą złożone
twory. Builder jednak tworzy stopniowo.
Abstract Factory z kolei kładzie nacisk na rodzinę drobnych produktów
tworzonych jednostrzałowo.
Często budowanym obiektem jest Composite
Podsumowanie:
Builder daje jednolity interfejs do
budowy złożonego obiektu klasie która wie kiedy budować i jakimi krokami, a niezbyt wie jak.
Pozwala mieć kilka metod na stworzenie poszczególnych elementów złożonego obiektu.
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/