Sobes.tech
Middle

Ի՞նչ է կառուցողը (Builder) ծրագրային ապահովման զարգացման համատեքստում։

sobes.tech AI

Պատասխան AI-ից

Դիզայնի ձևանիշը, որը բաժանում է բարդ օբյեկտի կառուցումը նրա ներկայացումից, թույլ է տալիս ստեղծել նույն կառուցման գործընթացի տարբեր ներկայացումներ:

Հիմնական առանձնահատկությունները՝

  • Պատասխանատվության բաժանում: Օբյեկտի ստեղծման տրամաբանությունը (կառուցման քայլերը) և օբյեկտի ներկայացումը (վերջնական արտադրանքը) բաժանված են:
  • Քայլ առ քայլ կառուցում: Օբյեկտը կառուցվում է քայլ առ քայլ, ինչը դարձնում է գործընթացը ավելի ճկուն և հասկանալի:
  • Տարբեր ներկայացումներ: Միևնույն կառուցման գործընթացը կարող է օգտագործվել տարբեր տարբերակների ստեղծման համար:
  • Ինկապսուլացում: Կառուցման մանրամասները թաքնված են հաճախորդից, ինչը հեշտացնում է օգտագործումը:

Հիմնական մասնակիցները՝

  • Builder (Կառուցող): Աբստրակտ ինտերֆեյս կամ դաս, որը սահմանում է քայլերը արտադրանքի մասերի ստեղծման համար:
  • ConcreteBuilder (Կոնկրետ Կառուցող): Կառուցողի կոնկրետ իրագործում, որը իրականացնում է մասերի կառուցումը և պահպանում արդյունքը:
  • Director (Ներքին): Դաս, որը օգտագործում է ConcreteBuilder օբյեկտը արտադրանքի կառուցման համար, կանչելով համապատասխան մեթոդներ որոշակի հաջորդականությամբ:
  • Product (Արտադրանք): Կազմված օբյեկտ, որը կառուցվում է:

Օգտագործման օրինակ՝

Ստեղծել Pizza օբյեկտ տարբեր բաղադրիչներով:

// Արտադրանք
class Pizza {
    private String dough;
    private String sauce;
    private String cheese;
    private List<String> toppings;

    public void setDough(String dough) { this.dough = dough; }
    public void setSauce(String sauce) { this.sauce = sauce; }
    public void setCheese(String cheese) { this.cheese = cheese; }
    public void addTopping(String topping) {
        if (toppings == null) {
            toppings = new ArrayList<>();
        }
        toppings.add(topping);
    }

    @Override
    public String toString() {
        return "Pizza with dough: " + dough + ", sauce: " + sauce + ", cheese: " + cheese + ", toppings: " + toppings;
    }
}

// Builder ինտերֆեյս
interface PizzaBuilder {
    void buildDough();
    void buildSauce();
    void buildCheese();
    void addTopping(String topping);
    Pizza getResult();
}

// Կոնկրետ Builder
class MargheritaPizzaBuilder implements PizzaBuilder {
    private Pizza pizza;

    public MargheritaPizzaBuilder() {
        this.pizza = new Pizza();
    }

    @Override
    public void buildDough() {
        pizza.setDough("Բարակ կեղև");
    }

    @Override
    public void buildSauce() {
        pizza.setSauce("Տոմատի սոուս");
    }

    @Override
    public void buildCheese() {
        pizza.setCheese("Մոցարելա");
    }

    @Override
    public void addTopping(String topping) {
        // Margherita-ն չունի լրացուցիչ բաղադրիչներ ըստ նախընտրության
    }

    @Override
    public Pizza getResult() {
        return pizza;
    }
}

// Ներքին
class Cook {
    private PizzaBuilder pizzaBuilder;

    public void setPizzaBuilder(PizzaBuilder pb) {
        pizzaBuilder = pb;
    }

    public void constructPizza() {
        pizzaBuilder.buildDough();
        pizzaBuilder.buildSauce();
        pizzaBuilder.buildCheese();
        // Ավելացվող բաղադրիչները կարող են ավելացվել այստեղ ըստ պահանջների
    }
}

// Կլիենտ կոդ
public class PizzaShop {
    public static void main(String[] args) {
        Cook cook = new Cook();
        PizzaBuilder margheritaBuilder = new MargheritaPizzaBuilder();

        cook.setPizzaBuilder(margheritaBuilder);
        cook.constructPizza();

        Pizza pizza = margheritaBuilder.getResult();
        System.out.println(pizza);
    }
}

Կիրառվում է, երբ՝

  • Պետք է ստեղծել բարդ օբյեկտ բազմաթիվ պարտադիր և ոչ պարտադիր պարամետրերով:
  • Օբյեկտի ստեղծման գործընթացը սեղմ և միաժամանակյա է, և ընդգրկում է բազմաթիվ քայլեր:
  • Պետք է ստեղծել տարբեր տարբերակներ նույն օբյեկտի համար, օգտագործելով նույն կառուցման ալգորիթմը:
  • Պետք է խուսափել մեծ քանակությամբ կոնստրուկտորներից ("թելեսկոպիկ կոնստրուկտոր").

Առավելություններ՝

  • Կարդալու և պահպանման բարելավում:
  • Գործնականում ստեղծման գործընթացում ճկունություն:
  • Անվտանգ և փոփոխական օբյեկտների ստեղծում:
  • Մեծ քանակությամբ կոնստրուկտորների անհրաժեշտության վերացում:

Մասամբ՝

  • Մեծացնել դասերի քանակը նախագծում:
  • Պահանջում է նախնական նախագծում։