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)
- Product: İnşa edilecek karmaşık nesne.
- Builder: Nesnenin parçalarını oluşturmaktan sorumlu soyut arayüz.
- ConcreteBuilder: Builder arayüzünü uygulayan ve ürünün parçalarını oluşturan sınıf.
- 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:

🎯 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
- Microsoft Docs – Design Patterns
- Refactoring Guru – Builder Pattern
- Gang of Four Tasarım Desenleri Kitabı
🔔 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:

🍔 İnceleyecek En Lezzetli Hamburger
İşte aynı zamanda tamamlanmış bir hamburgerin detaylı görseli:

📊 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:

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