Junior
Na czym polega przewaga wzorca projektowego Builder w porównaniu z zwykłym konstruktorem?
sobes.tech AI
Odpowiedź od AI
Zaleta jest następująca:
- Czytelność i zrozumiałość kodu: Przy dużej liczbie parametrów konstruktor staje się obszerny i trudny do odczytania. Builder pozwala przypisywać wartości do parametrów po ich nazwach, co czyni kod bardziej zrozumiałym.
// Bez Builder
ComplexObject obj = new ComplexObject(value1, value2, null, true, null, value6);
// Z Builder
ComplexObject obj = new ComplexObject.Builder()
.setValue1(value1)
.setValue2(value2)
.setFlag(true)
.setValue6(value6)
.build();
- Wsparcie dla parametrów opcjonalnych: Nie wszystkie parametry są zawsze potrzebne. Builder umożliwia łatwe tworzenie obiektów z różnymi kombinacjami parametrów opcjonalnych, unikając wielu przeciążonych konstruktorów.
- Niezmienność (opcjonalnie): Builder jest często używany do tworzenia obiektów niezmiennych, co zwiększa bezpieczeństwo i upraszcza programowanie wielowątkowe. Obiekt jest tworzony w pełni skonfigurowany w jednym kroku.
- Kontrola nad kolejnością ustawiania parametrów: Chociaż nie jest to oczywiste, Builder może kontrolować kolejność, w której ustawiane są parametry, jeśli jest to konieczne (np. dla parametrów zależnych).
- Ulepszona testowalność: Metody setter w Builderze są łatwiejsze do testowania w porównaniu z dużym konstruktorem.