Sobes.tech
Middle

Бунёдкор (Builder) дар контексти тарҳрезии нармафзор чист?

sobes.tech AI

Ҷавоб аз AI

Интихобии тарҳсозӣ, ки намунаи тарҳсозиро ҷудо мекунад, ки сохтани объекти мураккабро аз намоиши он ҷудо мекунад, имкон медиҳад, ки намоишҳои гуногуни объекти бо истифода аз як раванди сохтани ягона эҷод карда шаванд.

Принсипи кор:

  • Маҳсулот (Product): Объекти мураккаб, ки бояд сохта шавад.
  • Сохтани (Builder): Интерфейси абстрактӣ барои эҷоди қисмҳои маҳсулот.
  • Сохтани конкретӣ (Concrete Builder): Иҷрои интерфейси "Сохтани", ки қисмҳои мушаххасро месозад ва онҳоро ба маҳсулоти тайёр ҷамъ мекунад.
  • Директори (Director, интихобӣ): Тартиби қадамҳои сохтро муайян мекунад ва бо истифода аз Сохтани барои эҷоди маҳсулот.

Фоидаҳо:

  • Имкон медиҳад, ки объектҳои мураккаб қадам ба қадам сохта шаванд.
  • Логикаи сохтани объектро аз худи объект ҷудо мекунад.
  • Имкон медиҳад, ки намоишҳои гуногуни объект бо истифода аз як раванди ягона эҷод карда шаванд.
  • Бо илова кардани Concrete Builders навсозиро осон мекунад.

Норасоиҳо:

  • Баъзе синфҳоро зиёд мекунад, зеро зарур аст, ки Concrete Builders ҷудогона сохта шаванд.
  • Кодро барои объектҳои оддӣ мураккаб мекунад.

Маслиҳат барои истифода (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'}
    }
}