Czy to na pewno jest Builder a nie Factory?

0

Tutorial:

https://www.tutorialspoint.com/design_pattern/builder_pattern.htm

mi klasa MealBuilder wygląda raczej na factory, mam rację?

1

To nawet nie jest factory, to object mother.

2

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.

1 użytkowników online, w tym zalogowanych: 0, gości: 1