Widziałem, jak to pytanie powstało tu i tam kilka razy, ale nigdy nie znalazłem i nie odpowiedziałem, że byłem szczęśliwy.Gdzie użyłbyś wzorca budowniczego zamiast abstrakcyjnej fabryki?
Z Wikipedii:
Builder koncentruje się na budowie złożonego obiektu krok po kroku. Abstract Factory kładzie nacisk na rodzinę obiektów produktowych (prostych lub złożonych). Builder zwraca produkt jako ostatni krok, ale jeśli chodzi o Abstract Factory, produkt zostaje natychmiast zwrócony.
Ale dla klienta to nie to samo? Dostaje pełny obiekt po jego zbudowaniu, więc dla niego nie ma żadnej dodatkowej funkcjonalności.
Jedyny sposób, w jaki widzę, to sposób lub organizowanie kodu konstruktora w krokach, aby wymusić strukturę dla implementacji budowniczych. Co jest miłe, ale nie jest to wielki krok od abstrakcyjnej fabryki.
Następny bit z Wikipedii jest dobre referencje, aby dostać się do mojego punktu:
Często projekty zaczynają się przy użyciu metody fabryki (mniej skomplikowane, bardziej konfigurowalny, podklasy rozmnażać) i ewoluować w kierunku Abstrakcja Fabryka, prototyp lub budowniczy (bardziej elastyczny, bardziej złożony), ponieważ projektant odkrywa, gdzie potrzebna jest większa elastyczność.
Jeśli tak, to jaka złożoność musiałaby zostać wprowadzona w systemie, w którym zmieniłbyś się z fabryki abstrakcyjnej na konstruktora?
Chodzi mi o to, że nie mogę znaleźć i podać przykładu, gdzie jest jasne, że abstrakcyjna fabryka nie wystarczy i zamiast tego potrzebny byłby Builder.
+1 doskonałe pierwsze pytanie Lino! Powinieneś częściej wskakiwać :-)! – KLE
Dzięki, KLE. Nadal przeszkadza mi, chociaż :). Chodzi mi o to, że jeśli budujesz złożone obiekty, a ty zabierasz dyrektora, przekazując odpowiedzialność za wywoływanie metod budowniczych klientom, to działa to dla mnie. Tylko wtedy budowniczy wydaje się idealnie pasować. Ale z reżyserem to nie wydaje się dużo ... –
@Lino Precyzyjnie ** Builder nie ma dyrektora **, pozwala każdemu klientowi stworzyć złożony produkt ** zgodnie ze swoimi specyficznymi potrzebami **. Zazwyczaj żaden z dwóch klientów Buildera nie zbudowałby tego samego produktu. Jeśli ma to na celu stworzenie złożonego konstruktora w sposób hermetyzujący i wielokrotnego użytku (reżyser), to możesz mieć metodę hermetyzacji tego (i jest twoim "dyrektorem"). Wręcz przeciwnie, w przypadku ** AbstractFactory ** zazwyczaj potrzebujesz dyrektora wielokrotnego użytku, który ** tworzy produkty podobne ** (dostarczone z wdrożeniem w Fabryce). – KLE