Middle
Паттерни тарҳрезии 'Сохтмон' (Builder) чист?
sobes.tech AI
Ҷавоб аз AI
Модели "Builder" (Бунёдкор) — это шаблон проектирования, который позволяет пошагово создавать сложные объекты, предоставляя различные варианты конфигурации.
- Мақсат: отделить процесс конструирования объекта от его представления. Позволяет получать разные представления одного и того же процесса конструирования.
- Преимущества:
- Позволяет пошагово строить объект, скрывая детали конструирования.
- Облегчает создание объектов с большим количеством необязательных параметров (в отличие от конструкторов с множеством аргументов или анти-паттерна Telescoping Constructors).
- Можно использовать один и тот же код строительства для создания различных представлений объекта.
- Негізгі қатысушылар:
- Builder (Құрастырушы): Интерфейс немесе абстрактты класс, ол объектінің бөлшектерін құру қадамдарын анықтайды.
- ConcreteBuilder (Нақты Құрастырушы): Интерфейс немесе абстрактты класс жүзеге асырушы, ол нақты бөлшектерді құрастырады және соңғы нәтижені алуға әдіс ұсынады.
- 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 + "]";
}
}
// 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);
}
}