Tutorial:
https://www.tutorialspoint.com/design_pattern/builder_pattern.htm
mi klasa MealBuilder
wygląda raczej na factory, mam rację?
Tutorial:
https://www.tutorialspoint.com/design_pattern/builder_pattern.htm
mi klasa MealBuilder
wygląda raczej na factory, mam rację?
To nawet nie jest factory, to object mother.
To jest WTF a nie Builder ani Factory. Przykład na jakieś bieda factory:
class ConfigFileFactory{
public static ConfigFile getConfigFile(String filepath){
if(isXmlFile(filepath)){
return new XMLConfigFile(filepath);
}else if (isJSONFile(filepath)){
return new JSONConfigFile(filepath);
}else{
//cośtam
}
}
}
Przykład na jakiś bieda-Builder:
class StyleBuilder{
private final Style style;
public StyleBuilder withColor(Color c){
style.setColor(c);
}
public StyleBuilder withAlignment(Alignment a){
style.setAlignment(a);
}
public StyleBuilder withFont(Font f){
style.setFont(f);
}
public Style build(){
return style;
}
}
Fabryka pozwala nam tworzyć różne obiekty w zależności od odpowiedniej konfiguracji tej fabryki na przykład, w sposób dla użytkownika transparentny. W przykładzie wyżej np. masz aplikacje która pozwala na pliki konfiguracyjne w różnych formatach (np. stara i nowa wersja) a ty w programie nie chcesz się nigdzie przejmować tym jaki format ma użytkownik. Zamykasz to sobie w factory i potem w całym programie polegasz na tym ze factory zwraca ci odpowiedni obiekt.
Builder pozwala stworzyć obiekt z pewnym podzbiorem parametrów konfiguracyjnych. Wyobraź sobie że ten mój styl u góry może mieć 20 czy 30 parametrów (np. dodatkowo grubość linii, kursywa, pogrubienie, podkreślenie, wielkość, kolor tła, cieniowanie tła itd) i to jest np. styl komórki w tabelce. Zwykle user ustawia tylko kilka parametrów stylu a nie wszystkie, ale jak to zrealizować w kodzie w wygodny sposób? Konstruktor odpada no bo wtedy masz wszystkie 30 parametrów do wypełnienia a wszystkich kombinacji nie wygenerujesz. Możesz robić pusty obiekt a potem setterami ustawiać, ale ryzykujesz obiekty które nie są do końca zainicjalizowane. Builder pozwala ułatwić tworzenie takich obiektów.