Wpisany przez Kamil Dworak,
04 sierpnia 2010 14:31
Budowniczy (ang. builder) - wzorzec ten stosowany jest do konstruowania obiektów poprzez wcześniejsze stworzenie jego fragmentów. Składamy od szczegółu do ogółu (np. budowanie domu). Obiekty mogą być rozmaitych postaci, a wszystko opiera się na jednym procesie konstrukcyjnym. W konkretnych budowniczych decydujemy o tym, jak dany obiekt jest tworzony. Na koniec wywołujemy wszystkie metody poszczególnych budowniczych i otrzymujemy obiekt końcowy. Wzorzec ten często występuje z wzorcami fabryki oraz kompozytu.
- Director (szef) - zleca operacje odpowiedniemu budowniczemu (steruje budowaniem).
- Builder (budowniczy) - ogólny interfejs tworzenia produktu.
- ZestawABC996, ZestawXT001 (konkretny budowniczy) - tworzy odpowiednie składniki w oparciu o interfejs Builder.
- ZestawKomputerowy - produkt końcowy
- Ustawiamy w Directorze danego budowniczego.
- Obiekt szef odpala metodę skladaj().
- Przy pomocy budowniczego tworzymy nowy zestaw komputerowy (klasa abstrakcyjna Builder)
- Kolejno budujemy podzespoły zestawu przy pomocy obiektu budowniczego w których, dzięki utworzonemu obiektowi z poprzedniego punktu, inicjujemy pola zestawu komputerowego. Punkt ten jest kluczowy dla Buildera, tu właśnie decydujemy, jak nasz obiekt jest tworzony
- Director zwraca zestaw przy pomocy metody getZestaw().
Implementacje
Autor | Język programowania | Komentarz | Otwórz | Pobierz | Ocena |
Kamil Dworak | C# | Visual Studio 2008 | .cs | .cs | ***** / 9 |
Kamil Dworak | C/C++ | Visual Studio 2008 | .cpp | .cpp | ***** / 8 |
Kamil Dworak | Java | .java | .java | ***** / 19 | |
Piotr Synowiec | Php | .php | .php | ***** / 0 |
Poprawiony: 22 września 2010 20:19
Tworzymy w budowniczym obiekt dynamicznie, i to jest spoko. Natomiast przekazujemy go przez wartość (return *this) więc zostanie on skopiowany do osób, które go wezmą. Następnie jak jest nowe zamówienie to nasz wskaźnik w budowniczym ma budować nowy obiekt, nie niszcząc w ogóle starego. Wydaje mi się, że wyciek pamięci gwarantowany, chyba, że coś pominąłem.