Sobes.tech
Middle

Паттерни тарҳрезии 'Сохтмон' (Builder) чист?

sobes.tech AI

Ҷавоб аз AI

Модели "Builder" (Бунёдкор) — это шаблон проектирования, который позволяет пошагово создавать сложные объекты, предоставляя различные варианты конфигурации.

  • Мақсат: отделить процесс конструирования объекта от его представления. Позволяет получать разные представления одного и того же процесса конструирования.
  • Преимущества:
    • Позволяет пошагово строить объект, скрывая детали конструирования.
    • Облегчает создание объектов с большим количеством необязательных параметров (в отличие от конструкторов с множеством аргументов или анти-паттерна Telescoping Constructors).
    • Можно использовать один и тот же код строительства для создания различных представлений объекта.
  • Негізгі қатысушылар:
    1. Builder (Құрастырушы): Интерфейс немесе абстрактты класс, ол объектінің бөлшектерін құру қадамдарын анықтайды.
    2. ConcreteBuilder (Нақты Құрастырушы): Интерфейс немесе абстрактты класс жүзеге асырушы, ол нақты бөлшектерді құрастырады және соңғы нәтижені алуға әдіс ұсынады.
    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 + "]";
    }
}

// Builder интерфейсі
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);

        // Direktorсыз тікелей қолдану
        CarBuilder anotherSportsCarBuilder = new SportsCarBuilder();
        anotherSportsCarBuilder.buildEngine();
        anotherSportsCarBuilder.buildColor(); // Тек қана құрастыру
        Car partialCar = anotherSportsCarBuilder.getResult();
        System.out.println("Бөлікте құрастырылған машина: " + partialCar);
    }
}