Middle
Yazılım tasarımı bağlamında Builder (İnşaatçı) nedir?
sobes.tech yapay zeka
AI'dan gelen yanıt
Bu, karmaşık bir nesnenin yapımını temsil eden ve farklı yapım süreçleri kullanılarak nesnenin farklı temsillerinin oluşturulmasına izin veren yaratıcı bir tasarım desenidir.
Çalışma prensibi:
- Ürün (Product): İnşa edilmek istenen karmaşık nesne.
- İnşaatçı (Builder): Ürünün parçalarını oluşturmak için soyut arayüz.
- Somut İnşaatçı (Concrete Builder): "İnşaatçı" arayüzünü uygulayan ve ürünün belirli parçalarını oluşturan ve bunları bir araya getirerek nihai ürünü oluşturan sınıf.
- Yönetici (Director, isteğe bağlı): Yapım adımlarının sırasını belirler ve ürünü oluşturmak için İnşaatçı'yı kullanır.
Avantajlar:
- Karmaşık nesneleri adım adım inşa etmeye olanak tanır.
- Nesnenin yapım mantığını nesneden ayırır.
- Aynı yapım süreci kullanılarak nesnenin farklı temsillerini oluşturmayı sağlar.
- Yeni Concrete Builder'lar ekleyerek genişletmeyi kolaylaştırır.
Dezavantajlar:
- Her Concrete Builder için ayrı sınıflar oluşturma gerekliliği nedeniyle sınıf sayısını artırır.
- Basit nesneler için kodu karmaşıklaştırabilir.
Kullanım örneği (Java):
Karmaşık bir "Ev" nesnesinin oluşturulmasını düşünelim:
// Ürün
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 + '\'' +
'}';
}
}
// İnşaatçı
interface HouseBuilder {
void buildWalls();
void buildRoof();
void buildWindows();
void buildDoors();
House getResult();
}
// Somut İnşaatçı
class StoneHouseBuilder implements HouseBuilder {
private House house;
public StoneHouseBuilder() {
this.house = new House();
}
@Override
public void buildWalls() {
house.setWalls("Taş Duvarlar");
}
@Override
public void buildRoof() {
house.setRoof("Kiremit Çatı");
}
@Override
public void buildWindows() {
house.setWindows("Ahşap Pencereler");
}
@Override
public void buildDoors() {
house.setDoors("Sağlam Ahşap Kapılar");
}
@Override
public House getResult() {
return house;
}
}
// Yönetici (isteğe bağlı)
class Director {
public void constructStoneHouse(HouseBuilder builder) {
builder.buildWalls();
builder.buildRoof();
builder.buildWindows();
builder.buildDoors();
}
}
// Kullanım
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); // Çıktı: House{walls='Taş Duvarlar', roof='Kiremit Çatı', windows='Ahşap Pencereler', doors='Sağlam Ahşap Kapılar'}
}
}