Middle
რა არის დიზაინის ნიმუში 'მშენებელი' (Builder)?
sobes.tech AI
პასუხი AI-სგან
"შენებლის" (Builder) ნიმუში — ეს არის შექმნის დიზაინის ნიმუში, რომელიც საშუალებას აძლევს შექმნას რთული ობიექტები ეტაპობრივად, სხვადასხვა კონფიგურაციის ვარიანტების მიწოდებით.
- დანიშნულება: პროცესის გამიჯვნა ობიექტის კონსტრუქციიდან მისი წარმოდგენისგან. საშუალებას აძლევს მიიღოს სხვადასხვა წარმოდგენა ერთსა და იმავე კონსტრუქციის პროცესზე.
- უპირატესობები:
- საშუალებას აძლევს ეტაპობრივად ააშენოს ობიექტი, დამალული კონსტრუქციის დეტალები.
- ამარტივებს ობიექტების შექმნას დიდი რაოდენობით არასავალდებულო პარამეტრებით (შედარებით კონსტრუქტორებთან, რომლებიც იყენებენ მრავალ არგუმენტს ან ანტიპატერნს Telescoping Constructors).
- შეიძლება გამოიყენოს ერთი და იგივე კოდი ობიექტის სხვადასხვა წარმოდგენისთვის.
- ძირითადი მონაწილეები:
- Builder (შენებელი): ინტერფეისი ან აბსტრაქტული კლასი, რომელიც განსაზღვრავს ობიექტის ნაწილების მშენებლობის ნაბიჯებს.
- ConcreteBuilder (კონკრეტული შენებელი): ინტერფეისის Builder რეალიზაცია, რომელიც ქმნის კონკრეტულ ნაწილებს და უზრუნველყოფს საბოლოო შედეგის მიღებას.
- 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);
}
}