Sobes.tech
Middle

Kas ir Builder programmatūras dizaina kontekstā?

sobes.tech AI

Atbilde no AI

Tas ir būvniecības dizaina paraugs, kas atdala sarežģīta objekta būvniecību no tā attēlojuma, ļaujot izveidot dažādas objekta attēlojumus, izmantojot vienu un to pašu būvniecības procesu.

Darbības princips:

  • Produkts (Product): Sarežģīts objekts, kas jāizveido.
  • Būvētājs (Builder): Abstrakta saskarne produkta daļu izveidei.
  • Konkrētais būvētājs (Concrete Builder): Saskarnes "Būvētājs" realizācija, kas izveido konkrētas daļas un apvieno tās galīgajā produktā.
  • Direktors (Director, opcional): Nosaka būvniecības soļu secību un izmanto Būvētāju produkta izveidei.

Priekšrocības:

  • ļauj pakāpeniski veidot sarežģītus objektus.
  • atdala objekta būvniecības loģiku no paša objekta.
  • ļauj izveidot dažādas objekta attēlojumus, izmantojot vienu un to pašu procesu.
  • viegli paplašināms, pievienojot jaunus Konkrētus Būvētājus.

Trūkumi:

  • palielina klases skaitu, jo nepieciešams izveidot atsevišķus Konkrētus Būvētājus.
  • var sarežģīt kodu vienkāršiem objektiem.

Piemērs (Java):

Iedomāsimies sarežģīta objekta "Māja" izveidi:

// Produkts
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 + '\'' +
               '}';
    }
}

// Būvētājs
interface HouseBuilder {
    void buildWalls();
    void buildRoof();
    void buildWindows();
    void buildDoors();
    House getResult();
}

// Konkrētais būvētājs
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;
    }
}

// Direktors (opcionali)
class Director {
    public void constructStoneHouse(HouseBuilder builder) {
        builder.buildWalls();
        builder.buildRoof();
        builder.buildWindows();
        builder.buildDoors();
    }
}

// Izmantošana
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); // Izvade: House{walls='Stone Walls', roof='Tile Roof', windows='Wooden Windows', doors='Solid Wooden Doors'}
    }
}