Middle
Tərtibatçı (Builder) dizayn nümunəsi nədir?
sobes.tech Süni İntellekt
AI-dan cavab
"Tərtibçi" (Builder) nümunəsi, mürəkkəb obyektləri mərhələli şəkildə yaratmağa imkan verən, müxtəlif konfiqurasiya variantları təqdim edən yaradıcı dizayn nümunəsidir.
- Təyinat: Obyektin qurulma prosesini onun təqdimatından ayırmaq. Eyni qurulma prosesinin müxtəlif təqdimatlarını almağa imkan verir.
- Üstünlüklər:
- Obyekti mərhələli şəkildə qurmağa imkan verir, qurulma detalları gizlidir.
- Çoxsaylı qeyri-zəruri parametrlərlə obyektlərin yaradılmasını asanlaşdırır (bir çox arqumentli konstruktorlar və ya Telescoping Constructors anti-nümunəsindən fərqli olaraq).
- Eyni qurma kodunu istifadə edərək müxtəlif obyekt təqdimatları yarada bilərsiniz.
- Əsas iştirakçılar:
- Builder (Tərtibçi): Obyektin hissələrinin qurulma mərhələlərini müəyyən edən interfeys və ya abstrakt sinif.
- ConcreteBuilder (Ətraflı Tərtibçi): Builder interfeysinin tətbiqi, obyektin konkret hissələrini yaradır və nəticəni alma metodunu təqdim edir.
- Director (Direktor): Obyektin yaradılması üçün mərhələlərin ardıcıllığını müəyyən edir, Builder obyektindən istifadə edir. Direktor zəruri deyil və müştəri birbaşa Tərtibçi ilə işləyə bilər.
- Product (Məhsul): Qurulan obyekt.
Struktur nümunəsi (Java):
// Məhsul
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 + "]";
}
}
// Tərtibçi interfeysi
interface CarBuilder {
void buildEngine();
void buildWheels();
void buildColor();
Car getResult();
}
// Ətraflı Tərtibçi
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;
}
}
// Direktor (İstəyə bağlı)
class CarDirector {
private CarBuilder builder;
public CarDirector(CarBuilder builder) {
this.builder = builder;
}
public void constructCar() {
builder.buildEngine();
builder.buildWheels();
builder.buildColor();
}
}
// Müştəri istifadəsi
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("Yaradılmış maşın: " + sportsCar);
// Direktor olmadan birbaşa istifadə
CarBuilder anotherSportsCarBuilder = new SportsCarBuilder();
anotherSportsCarBuilder.buildEngine();
anotherSportsCarBuilder.buildColor(); // Wheels olmadan qurulma
Car partialCar = anotherSportsCarBuilder.getResult();
System.out.println("Yaradılmış qismən maşın: " + partialCar);
}
}