Middle
Құрылысшы (Builder) жобалау үлгісі дегеніміз не?
sobes.tech AI
AI-дан жауап
"Құрылысшы" (Builder) үлгісі — бұл күрделі объектілерді кезең-кезеңімен құруға арналған туады жобалау үлгісі. Ол күрделі объектінің құрылыс процесін оның көрінісінен бөледі, сонда бірдей құрылыс процесі әртүрлі көріністерді құра алады.
Жұмыс принциптері:
- Бөлу: Объектіні құру логикасын объектіден бөледі.
- Өкілдік ету: Клиенттік код (Director) объектіні құруды бөлек классқа (Builder) жүктейді.
- Қадамдық құру: Объект құрастырушының әдістер жиынтығы арқылы құралады.
Негізгі қатысушылар:
- Өнім: Біз құрастыратын күрделі объект. Ол құру процесінен тәуелсіз.
- Builder: Абстрактілі интерфейс, Product құру қадамдарын анықтайды.
- ConcreteBuilder: Builder-дің нақты жүзеге асуы, құру қадамдарын жүзеге асырады және дайын Product-ты алуға әдіс береді.
- Director (міндетті емес): Құру қадамдарының тәртібін анықтайды. Клиенттік код тікелей ConcreteBuilder-пен жұмыс істей алады.
Артықшылықтары:
- Көптеген міндетті параметрлері бар объектілерді оқылымдырақ етіп құруға мүмкіндік береді, көп аргументті конструкторлар немесе сеттер тізбектері арқылы емес.
- Бірдей құрылыс процесін пайдалана отырып, бір объектінің әртүрлі вариацияларын құруға мүмкіндік береді.
- Құрылатын объектінің ішкі құрылымын жасырады.
Кемшіліктері:
- Жобадағы класс санының артуына әкелуі мүмкін (Builder, ConcreteBuilder, Product, Director).
Қолдану мысалы: әртүрлі ингредиенттері бар Pizza класы объектісін құру.
// Өнім
public 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 setToppings(List<String> toppings) { this.toppings = toppings; }
@Override
public String toString() {
return "Pizza with dough=" + dough + ", sauce=" + sauce + ", cheese=" + cheese + ", toppings=" + toppings;
}
}
// Құрылысшы
public interface PizzaBuilder {
void buildDough();
void buildSauce();
void buildCheese();
void addTopping(String topping);
Pizza getPizza();
}
// Нақты құрылысшы
public class MargheritaPizzaBuilder implements PizzaBuilder {
private Pizza pizza;
public MargheritaPizzaBuilder() {
this.pizza = new Pizza();
this.pizza.setToppings(new ArrayList<>()); // Топпингтер тізімін инициализациялау
}
@Override
public void buildDough() {
pizza.setDough("Тонкий қабат" );
}
@Override
public void buildSauce() {
pizza.setSauce("Қызанақ соусы" );
}
@Override
public void buildCheese() {
pizza.setCheese("Моцарелла" );
}
@Override
public void addTopping(String topping) {
// Маргерита басқа топпингтерді қоспайды, тек негізгісін ғана
}
@Override
public Pizza getPizza() {
return this.pizza;
}
}
// Басқарушы (міндетті емес)
public class Kitchen {
private PizzaBuilder pizzaBuilder;
public void setPizzaBuilder(PizzaBuilder pb) {
pizzaBuilder = pb;
}
public Pizza getPizza() {
return pizzaBuilder.getPizza();
}
public void constructPizza() {
pizzaBuilder.buildDough();
pizzaBuilder.buildSauce();
pizzaBuilder.buildCheese();
// Басқа әдістер шақырылуы мүмкін, мысалы addTopping() басқа құрылысшыда
}
}
Қолдану:
// Клиенттік код
Kitchen kitchen = new Kitchen();
PizzaBuilder margheritaBuilder = new MargheritaPizzaBuilder();
kitchen.setPizzaBuilder(margheritaBuilder);
kitchen.constructPizza();
Pizza margherita = kitchen.getPizza();
System.out.println(margherita); // Шығу: Pizza with dough=Тонкий қабат, sauce=Қызанақ соусы, cheese=Моцарелла, toppings=[]