Middle
Ի՞նչ է նախագծման 'Կառուցող' (Builder) դիզայնի նմուշը։
sobes.tech AI
Պատասխան AI-ից
"Builder" (Կառուցող) մոդելը ստեղծող դիզայնի օրինակ է, որը թույլ է տալիս քայլ առ քայլ ստեղծել բարդ օբյեկտներ՝ տարբեր կոնֆիգուրացիոն տարբերակներ տրամադրելով:
- Նպատակը: Բաժանել օբյեկտի կառուցման գործընթացը նրա ներկայացումից: Հնարավորություն տալ տարբեր ներկայացումներ ստանալ նույն կառուցման գործընթացից:
- Առավելությունները:
- Օգտագործելով քայլ առ քայլ կառուցում՝ թաքցնել կառուցման մանրամասները:
- Հեշտացնել օբյեկտների ստեղծումը՝ մեծ քանակությամբ պարտադիր olmayan պարամետրերով, հակառակ դեպքում՝ բազմափուլ կոնստրուկտորների կամ հակառակ մոդելի Telescoping Constructors:
- Օգտագործել նույն կոդը՝ տարբեր ներկայացումներ ստեղծելու համար:
- Հիմնական մասնակիցներ:
- Builder (Կառուցող): Ինտերֆեյս կամ ամփոփ դաս, որը սահմանում է օբյեկտի մասերի կառուցման քայլերը:
- ConcreteBuilder (Նշանակված Կառուցող): Կառուցողի ինտերֆեյսի իրագործում, որը ստեղծում է կոնկրետ մասեր և տրամադրում է վերջնական արդյունքը ստանալու մեթոդ:
- Director (Ներքին կառավարիչ): Կարգավորում է օբյեկտի ստեղծման քայլերի հաջորդականությունը՝ օգտագործելով Builder օբյեկտը: Դիրեկտորը պարտադիր չէ, և հաճախորդը կարող է աշխատել ուղղակիորեն Կառուցողի հետ:
- Product (Ապրանք): Օբյեկտը, որը կառուցվում է:
Կառուցման օրինակ (Java).
// Ապրանք
class Car {
private String engine;
private int wheels;
private String color;
public void setEngine(String engine) {
this.engine = engine;
}
public void setWheels(int wheels) {
this.wheels = wheels;
}
public void setColor(String color) {
this.color = color;
}
@Override
public String toString() {
return "Car [engine=" + engine + ", wheels=" + wheels + ", color=" + color + "]";
}
}
// Կառուցողի ինտերֆեյս
interface CarBuilder {
void buildEngine();
void buildWheels();
void buildColor();
Car getResult();
}
// Նշանակված Կառուցող
class SportsCarBuilder implements CarBuilder {
private Car car = new Car();
@Override
public void buildEngine() {
car.setEngine("V8");
}
@Override
public void buildWheels() {
car.setWheels(4);
}
@Override
public void buildColor() {
car.setColor("Red");
}
@Override
public Car getResult() {
return car;
}
}
// Դիրեկտոր (ընտրովի)
class CarDirector {
private CarBuilder builder;
public CarDirector(CarBuilder builder) {
this.builder = builder;
}
public void constructCar() {
builder.buildEngine();
builder.buildWheels();
builder.buildColor();
}
}
// Հաճախորդի օգտագործում
public class Client {
public static void main(String[] args) {
CarBuilder sportsCarBuilder = new SportsCarBuilder();
CarDirector director = new CarDirector(sportsCarBuilder);
director.constructCar();
Car sportsCar = sportsCarBuilder.getResult();
System.out.println("Կառուցված ավտոմեքենա: " + sportsCar);
// ուղղակի օգտագործում առանց Դիրեկտորի
CarBuilder anotherSportsCarBuilder = new SportsCarBuilder();
anotherSportsCarBuilder.buildEngine();
anotherSportsCarBuilder.buildColor(); // առանց անիվների
Car partialCar = anotherSportsCarBuilder.getResult();
System.out.println("Կառուցված մասնակի ավտոմեքենա: " + partialCar);
}
}