Budowniczy – Wzorzec Projektowy (Builder)

Budowniczy – Wzorzec Projektowy (ang. Builder). Przykład zastosowania oparty na historii w celu łatwiejszego zrozumienia tego wzorca dla laika.

James miał mała firmę. Składał i sprzedawał hulajnogi w wersji standardowej. Taki pojazd składa się z hamulca o nazwie HamulceStd, kierownicy – KierownicaStd, kółek – KolkaStd i naklejki z nazwa hulajnogi – Standard.

Budowa nie była skomplikowana:

James dobrze radził sobie w trudnych czasach kapitalizmu. Pewnego razu jego firma wygrała przetarg na 1000 standardowych hulajnóg. Postanowił więc zatrudnić swojego brata Arona do pomocy. James stopniowo pokazywał Aronowi jak montować kółka, hamulce, kierownice i jak poprawnie nakleić naklejkę. Aron stał się rzemieślnikiem standardowych hulajnóg (konkretnym budowniczym). Aron nauczył się pewnego schematu, wpierw dokręcić kółka, później zamontować hamulce, dokleić naklejkę, a na koniec zamontować kierownice.

W momencie kiedy Aron budował dwukołowe pojazdy, James (już poważny dyrektor firmy) zajmował się liczeniem pieniędzy.

James po kilka miesiącach testów postanowił wprowadzić nowy model hulajnogi – wersje Extreme do jazdy wyczynowej. Wersja Extreme miała jednak całkowicie inne komponenty. James postanowił zatrudnić kolegę Michała do budowania hulajnogi Extreme. Michał został wyszkolony przez James i Arona jak szybko i sprawnie budować nową wersję hulajnogi.

Sposób budowy był taki sam jak w przypadku standardowej hulajnogi. Michał stał się mistrzem (konkretnym budowniczym) w budowaniu extremalnej hulajnogi.

Czy dostrzegasz jakieś problemy?
Hulajnoga sama sobie nie dokręci kółek, nie zamontuje hamulców czy kierownicy. Robią to ludzie. Aron jest konkretnym budowniczym standardowych hulajnóg, a Michał wersji Extreme. Dodajmy do programu naszych rzemieślników budowlanych.

Dwie klasy: HulajnogaStandardowa oraz HulajnogaExtreme maja te same właściwości. Stwórzmy wiec dla nich jedna klasę.

Zauważ, ze BudownczyHulajnogiStandardowej oraz BudowniczyHulajnogiExtremalnej maja te same metody. Stwórzmy więc dla tych klas wspólny interfejs:

Dodaliśmy również metodę OddajZbudowanaHulajnoge. W momencie w którym któryś z konkretnych budowniczych zbuduje hulajnogę to powinien ten pojazd oddać dyrektorowi. Apropo dyrektora. Dodajmy go do naszego programu. A co może robić dyrektor? Poprosić swojego pracownika, aby stworzył dla niego hulajnogę w sposób jaki dyrektor uważa za właściwy.

Zobaczmy więc jak firma może teraz działać:

Trochę teorii:

Poniższy diagram UML przedstawia wzorzec projektowy Budowniczy.

Wzorzec Projektowy: Budowniczy
Źródło: wikipedia.org

Odnieśmy ten diagram UML do naszego przykładu.

Dyrektor jako Director
IBudowniczyHulajnog jako Builder
BudownczyHulajnogiStandardowej jako ConcreteBuilder
BudowniczyHulajnogiExtremalnej jako ConcreteBuilder
Hulajnoga jako Product

Wzorzec ten został opisany przez Bandę Czworga (Gang of Four). Wzorzec projektowy Budowniczy należy do wzorców kreacyjnych. Idea jaka stoi za tym wzorem jest prosta. Tworzeniem tych samych obiektów (Product), ale o innych właściwościach zajmują się wyspecjalizowane w tym temacie klasy zwane ConcreteBuilder. ConcreteBuilder implementują interfejs Builder. Klasy ConcreteBuilder są zaprzęgane do działania dzięki klasie Dyrektor.

Przydatne linki:

CodeProject – przykład w C# (ang)
DoFactory – przykład w C# (ang)
Dotnet-tricks – przykład w C# (ang)
Wikipedia (ang)
Wikipedia (pl)

Powered by: Wordpress