Programlamada Tasarım Desenleri #8 — Builder Design Pattern (C# ile Uygulamalı Anlatım)

Tasarım desenleri serimizin 8. yazısında, yazılım geliştirmede önemli bir yere sahip olan Builder Design Pattern (Yapıcı Tasarım Deseni)‘ni inceleyeceğiz. Özellikle .NET ve C# uygulamalarında nesne üretimini kontrol almanıza yardım edecek bu desenin, pratikte nasıl kullanılacağını adım adım göreceğiz.


📌 Builder Design Pattern Nedir?

Builder Pattern, karmaşık nesnelerin oluşturulmasını adım adım kontrol etmenizi sağlayan bir yaratımsal (creational) tasarım desenidir. Aynı oluşturma süreciyle farklı türde nesneler üretmemize olanak tanır.


🧠 Neden Builder Pattern’e İhtiyaç Duyarız?

Basit bir nesne oluşturmak için constructor parametreleri yeterli olabilir. Ancak aşağıdaki durumlarda Builder Pattern çok faydalı olur:

  • Nesne çok fazla parametreye sahipse.
  • Bazı parametrelerin isteğe bağlı olması gerekiyorsa.
  • Nesne oluşturulurken belirli adımların takip edilmesi gerekiyorsa.
  • Farklı konfigürasyonlarla aynı nesne ailesinden farklı türde nesneler üretilmek isteniyorsa.

👷 Builder Pattern’in Katılımcıları (Participants)

  1. Product: İnşa edilecek karmaşık nesne.
  2. Builder: Nesnenin parçalarını oluşturmaktan sorumlu soyut arayüz.
  3. ConcreteBuilder: Builder arayüzünü uygulayan ve ürünün parçalarını oluşturan sınıf.
  4. Director: Nesnenin inşa sürecinden sorumlu olan sınıf (opsiyoneldir).

🔨 C# ile Builder Pattern Örneği

📌 Diyelim ki bir Burger (Hamburger) nesnesi oluşturmak istiyoruz. Müşteri farklı türlerde hamburger sipariş edebilir: (Sadece etli, etli + peynirli, vegan, vs.)

1️⃣ Ürün Sınıfı: Burger

public class Burger {
public string Bread { get; set; }
public string Meat { get; set; }
public bool Cheese { get; set; }
public bool Lettuce { get; set; }
public bool Tomato { get; set; }

public override string ToString() {
return $”Burger with: {Bread}, {Meat}, Cheese: {Cheese}, Lettuce: {Lettuce}, Tomato: {Tomato}”;
}
}

2️⃣ Builder Arayüzü

public interface IBurgerBuilder {
void SetBread(string bread);
void SetMeat(string meat);
void AddCheese();
void AddLettuce();
void AddTomato();
Burger GetBurger();
}

3️⃣ ConcreteBuilder: CheeseBurgerBuilder

public class CheeseBurgerBuilder : IBurgerBuilder {
private Burger _burger = new();

public void SetBread(string bread) {
_burger.Bread = bread;
}

public void SetMeat(string meat) {
_burger.Meat = meat;
}

public void AddCheese() {
_burger.Cheese = true;
}

public void AddLettuce() {
_burger.Lettuce = true;
}

public void AddTomato() {
_burger.Tomato = true;
}

public Burger GetBurger() {
return _burger;
}
}

4️⃣ Director Sınıfı

Director nesne oluşturulurken hangi adımların uygulanacağını belirler.
public class BurgerDirector {
private readonly IBurgerBuilder _builder;

public BurgerDirector(IBurgerBuilder builder) {
_builder = builder;
}

public void MakeCheeseBurger() {
_builder.SetBread(“Sesame”);
_builder.SetMeat(“Beef”);
_builder.AddCheese();
_builder.AddLettuce();
_builder.AddTomato();
}
}

5️⃣ Kullanım (Client Code)

class Program {
static void Main(string[] args) {
IBurgerBuilder builder = new CheeseBurgerBuilder();
var director = new BurgerDirector(builder);

director.MakeCheeseBurger();

Burger burger = builder.GetBurger();
Console.WriteLine(burger);
}
}

🔍 Çıktı:

Burger with: Sesame, Beef, Cheese: True, Lettuce: True, Tomato: True

🖼️ Builder Pattern Diyagramı

Aşağıda Builder Pattern’in UML diyagramını görebilirsiniz:

Builder Pattern UML Diagram

🎯 Ne Zaman Kullanalım?

  • Constructor patlaması yaşadığınızda (çok fazla parametre).
  • Nesne yapılandırması adım adım ilerliyorsa.
  • Farklı ürün konfigurasyonları oluşturmanız gerekiyorsa.

✅ Avantajları

  • Karmaşık nesne oluşturulmasını kolaylaştırır.
  • Kod daha okunabilir ve sürdürülebilir olur.
  • Nesne üretim süreci net olarak tanımlanabilir.

❗ Dikkat Edilmesi Gerekenler

  • Küçük ve basit nesneler için overkill (gereksiz karmaşa) olabilir.
  • Çok fazla builder sınıfı oluşturmak kodu fazladan şişirebilir.

🔚 Sonuç

Builder Design Pattern, özellikle yapılandırılması zor nesnelerin oluşturulmasında hayat kurtarıcı bir yaklaşımdır. C# ve .NET dünyasında bu deseni uzun vadede sürdürülebilirlik için sıkça tercih edebilirsiniz.


📌 Builder Design Pattern hakkında daha fazla örnek, PDF ve proje dosyası için bizi takip edin. Bu seride sıradaki yazımız: Prototype Design Pattern ile Nesneleri Kopyalamak olacak.


📥 Kaynaklar & Ek Okuma


🔔 Siz de Builder Pattern’i daha önce kullandınız mı? Yorumlarda paylaşmayı unutmayın!


👉 Daha Fazla Yazı İçin: Tüm Tasarım Desenleri Serisi

📨 Yeni yazılardan haberdar olmak için bültenimize abone olun.


🧑‍🍳 Burger Yapma Süreci

Aşağıda bir şefin mutfakta hamburger yapma sürecine dair görseli görebilirsiniz:

Şef Hamburger Yapma Süreci

🍔 İnceleyecek En Lezzetli Hamburger

İşte aynı zamanda tamamlanmış bir hamburgerin detaylı görseli:

Tamamlanmış Hamburger

📊 Builder Pattern ile Gelen Faydalar

Aşağıda Builder Pattern’in sağladığı faydalar ve geleneksel yöntemler arasındaki farkları gösteren bir infografik var:

Builder Pattern İnfografiği

👨‍💻 C# Kodlama Ortamı

Aşağıda bir programcının C# kodu yazarkenki çalışma ortamını gösteren bir görsel bulunmaktadır:

C# Kodlama Ortamı

You may also like...

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir