Sobes.tech
Middle

Программалык камсыздоону долбоорлоодо Builder деген эмне?

sobes.tech AI

AIден жооп

Бул дизайн үлгүсү, татаал объекттин курулушун анын көрсөтүүсүнөн бөлүп турат, бир эле курулуш процесси менен ар кандай объект көрсөтүүлөрүн түзүүгө мүмкүндүк берет.

Иш принципи:

  • Өнүм (Product): Курулчу татаал объект.
  • Куруучу (Builder): Объекттин бөлүктөрүн түзүү үчүн абстракттуу интерфейс.
  • Конкреттүү куруучу (Concrete Builder): "Куруучу" интерфейсин ишке ашырат, конкреттүү бөлүктөрдү түзөт жана аларды даяр продуктка чогултат.
  • Директор (Director, optional): Курулуш кадамдарынын тартибин аныктайт жана продукт түзүү үчүн Куруучуну колдонуп жатат.

Артыкчылыктары:

  • Татаал объекттерди кадам-кадам түзүүгө мүмкүндүк берет.
  • Объекттин курулуш логикасын объекттен бөлүп турат.
  • Бир эле процесстин жардамы менен ар кандай объект көрсөтүүлөрүн түзүүгө мүмкүндүк берет.
  • Жаңы Concrete Builderлерди кошуу менен кеңейтүүнү жеңилдетет.

Кемчиликтери:

  • Ар бир жаңы Concrete Builder түзүү керектигинен класстардын саны көбөйөт.
  • Жөнөкөй объекттер үчүн кодду кыйындатышы мүмкүн.

Колдонуу мисалы (Java):

"Үй" деп аталган татаал объект түзүүнү каралы:

// Өнүм
class House {
    private String walls;
    private String roof;
    private String windows;
    private String doors;

    public void setWalls(String walls) { this.walls = walls; }
    public void setRoof(String roof) { this.roof = roof; }
    public void setWindows(String windows) { this.windows = windows; }
    public void setDoors(String doors) { this.doors = doors; }

    @Override
    public String toString() {
        return "House{" +
               "walls='" + walls + '\'' +
               ", roof='" + roof + '\'' +
               ", windows='" + windows + '\'' +
               ", doors='" + doors + '\'' +
               '}';
    }
}

// Куруучу
interface HouseBuilder {
    void buildWalls();
    void buildRoof();
    void buildWindows();
    void buildDoors();
    House getResult();
}

// Конкреттүү куруучу
class StoneHouseBuilder implements HouseBuilder {
    private House house;

    public StoneHouseBuilder() {
        this.house = new House();
    }

    @Override
    public void buildWalls() {
        house.setWalls("Stone Walls");
    }

    @Override
    public void buildRoof() {
        house.setRoof("Tile Roof");
    }

    @Override
    public void buildWindows() {
        house.setWindows("Wooden Windows");
    }

    @Override
    public void buildDoors() {
        house.setDoors("Solid Wooden Doors");
    }

    @Override
    public House getResult() {
        return house;
    }
}

// Директор (опционал)
class Director {
    public void constructStoneHouse(HouseBuilder builder) {
        builder.buildWalls();
        builder.buildRoof();
        builder.buildWindows();
        builder.buildDoors();
    }
}

// Колдонуу
public class BuilderExample {
    public static void main(String[] args) {
        Director director = new Director();
        HouseBuilder stoneHouseBuilder = new StoneHouseBuilder();

        director.constructStoneHouse(stoneHouseBuilder);

        House stoneHouse = stoneHouseBuilder.getResult();
        System.out.println(stoneHouse); // Чыгуу: House{walls='Stone Walls', roof='Tile Roof', windows='Wooden Windows', doors='Solid Wooden Doors'}
    }
}