Middle
Курулушчу (Builder) долбоорлоо үлгүсү деген эмне?
sobes.tech AI
AIден жооп
"Builder" (Курулушчу) үлгүсү — бул куралышыч дизайн үлгүсү, ал кыйынчылык менен түзүлүүчү объекттерди кадам-кадам түзүүгө мүмкүндүк берет жана ар кандай конфигурация варианттарын сунуштайт.
- Максат: Объекттин куруу процесси менен анын көрсөтүлүшүн бөлүү. Бир эле куруу процесси үчүн ар кандай көрсөтүүлөрдү алуу мүмкүнчүлүгүн камсыз кылуу.
- Артыкчылыктары:
- Объектти кадам-кадам курууга мүмкүндүк берүү, куруу деталдарын жашыруу.
- Көптөгөн милдеттүү эмес параметрлери бар объекттерди түзүүдө жеңилдик берүү (көп аргументтери бар куруучулар же Anti-pattern Telescoping Constructors менен айырмаланып).
- Бир эле куруу кодун колдонуп, ар кандай объект көрсөтүүлөрүн түзүү.
- Негизги катышуучулар:
- Builder (Куруучу): Объекттин бөлүктөрүн куруу кадамдарын аныктаган интерфейс же абстракттуу класс.
- ConcreteBuilder (Конкреттүү куруучу): Builder интерфейсинин ишке ашырылышы, ал конкреттүү бөлүктөрдү түзүп, акыркы натыйжаны алуу үчүн методду камсыз кылат.
- 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 + "]";
}
}
// Куруучу интерфейс
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);
}
}