Middle
'Builder' (Quruvchi) dizayn shabloni nima?
sobes.tech AI
AIdan javob
"Builder" (Quruvchi) dizayn shabloni murakkab obyektlarni bosqichma-bosqich yaratishga imkon beradigan va turli konfiguratsiya variantlarini taqdim etadigan yaratuvchi dizayn shablonidir.
- Maqsad: Ob'ektni qurish jarayonini uning tasviridan ajratish. Bir xil qurilish jarayonining turli xil tasvirlarini olish imkonini beradi.
- Afzalliklar:
- Ob'ektni bosqichma-bosqich qurishga imkon beradi, qurilish tafsilotlarini yashiradi.
- Ko'p miqdordagi ixtiyoriy parametrlar bilan obyektlarni yaratishni osonlashtiradi (bir nechta argumentli konstruktorlar yoki Telescoping Constructors anti-patterniga qarshi).
- Bir xil qurilish kodidan foydalanib, obyektning turli tasvirlarini yaratish mumkin.
- Asosiy ishtirokchilar:
- Builder (Quruvchi): Ob'ektning qismlarini qurish uchun bosqichlarni belgilovchi interfeys yoki abstrakt sinf.
- ConcreteBuilder (Aniq Quruvchi): Builder interfeysini amalga oshiradigan, obyektning aniq qismlarini yaratadigan va yakuniy natijani olish uchun metod taqdim etadigan sinf.
- Director (Direktor): Ob'ektni yaratish uchun bosqichlar ketma-ketligini belgilaydi, Builder ob'ekti yordamida. Direktor ixtiyoriy va mijoz to'g'ridan-to'g'ri Quruvchi bilan ishlashi mumkin.
- Product (Mahsulot): Qurilayotgan obyekt.
Java misol strukturasini ko'rib chiqamiz:
// Mahsulot
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 + "]";
}
}
// Quruvchi interfeysi
interface CarBuilder {
void buildEngine();
void buildWheels();
void buildColor();
Car getResult();
}
// Aniq Quruvchi
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 (ixtiyoriy)
class CarDirector {
private CarBuilder builder;
public CarDirector(CarBuilder builder) {
this.builder = builder;
}
public void constructCar() {
builder.buildEngine();
builder.buildWheels();
builder.buildColor();
}
}
// Mijozdan foydalanish
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("Yaratilgan avtomobil: " + sportsCar);
// Direktorisiz to'g'ridan-to'g'ri foydalanish
CarBuilder anotherSportsCarBuilder = new SportsCarBuilder();
anotherSportsCarBuilder.buildEngine();
anotherSportsCarBuilder.buildColor(); // Rul olmadan qurish
Car partialCar = anotherSportsCarBuilder.getResult();
System.out.println("Yaratilgan qisman avtomobil: " + partialCar);
}
}