Sobes.tech
Middle

Курулушчу (Builder) долбоорлоо үлгүсү деген эмне?

sobes.tech AI

AIден жооп

"Builder" (Курулушчу) үлгүсү — бул куралышыч дизайн үлгүсү, ал кыйынчылык менен түзүлүүчү объекттерди кадам-кадам түзүүгө мүмкүндүк берет жана ар кандай конфигурация варианттарын сунуштайт.

  • Максат: Объекттин куруу процесси менен анын көрсөтүлүшүн бөлүү. Бир эле куруу процесси үчүн ар кандай көрсөтүүлөрдү алуу мүмкүнчүлүгүн камсыз кылуу.
  • Артыкчылыктары:
    • Объектти кадам-кадам курууга мүмкүндүк берүү, куруу деталдарын жашыруу.
    • Көптөгөн милдеттүү эмес параметрлери бар объекттерди түзүүдө жеңилдик берүү (көп аргументтери бар куруучулар же Anti-pattern Telescoping Constructors менен айырмаланып).
    • Бир эле куруу кодун колдонуп, ар кандай объект көрсөтүүлөрүн түзүү.
  • Негизги катышуучулар:
    1. Builder (Куруучу): Объекттин бөлүктөрүн куруу кадамдарын аныктаган интерфейс же абстракттуу класс.
    2. ConcreteBuilder (Конкреттүү куруучу): Builder интерфейсинин ишке ашырылышы, ал конкреттүү бөлүктөрдү түзүп, акыркы натыйжаны алуу үчүн методду камсыз кылат.
    3. Director (Директор): Объектти түзүү үчүн кадамдардын ретін аныктайт, Builder объектин колдонуп. Директор зарыл эмес жана кардар түздөн-түз Куруучуга иштей алат.
    4. 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);
    }
}