Programlamada Tasarım Desenleri #4 — Prototype Design Pattern Nedir? (C# .NET ile Örnek)
Merhaba yazılım severler! Tasarım desenleri serimizin dördüncü yazısına hoş geldiniz 🚀 Bu yazıda, Prototype Design Pattern (Prototip Tasarım Deseni) konusunu detaylıca ele alacağız. Özellikle C# ve .NET platformunda çalışan geliştiriciler için gerçek dünya örnekleriyle zengin, SEO dostu ve bilgi dolu bir içerik hazırladık.
🔍 Prototype Design Pattern Nedir?
Prototype, GOF (Gang of Four) tarafından tanımlanan yaratıcı (creational) tasarım desenlerinden biridir. Bu desenin temel amacı; nesnelerin kopyalanarak (clone edilerek) oluşturulmasını sağlamaktır. Böylece nesne oluşturma işlemleri daha verimli ve esnek bir hale gelir.
🧠 Ne Zaman Kullanılır?
Prototype Pattern’i özellikle aşağıdaki durumlar için tercih edebilirsiniz:
- Nesnelerinizin oluşturulması pahalı bir işlem gerektiriyorsa (örneğin, büyük veri yığınları içeriyorsa),
- Nesneleri run-time’da yapısına göre çoğaltmanız gerekiyorsa,
- Subclass oluşturmadan yeni nesne kopyaları üretmek istiyorsanız,
- Nesnelerin aynı olmasını ama bazı alanlarının değişmesini istiyorsanız.
🧪 C# ile Prototype Deseni Nasıl Uygulanır?
🔧 Adım 1: ICloneable Arayüzü
C# dilinde klonlama yapmak için genellikle .NET’in sunduğu ICloneable arayüzü kullanılır.
public interface IPrototype<T>
{
T Clone();
}
Bu arayüz sayesinde nesnelerin birebir kopyaları kolayca oluşturulabilir.
🧱 Adım 2: Sınıfımızı Oluşturalım
Aşağıdaki örnekte, bir grafik uygulamasında kullanılabilecek “Şekil” sınıfı oluşturulmuştur.
public class Shape : IPrototype<Shape>
{
public int X { get; set; }
public int Y { get; set; }
public string Color { get; set; }
public Shape(int x, int y, string color)
{
X = x;
Y = y;
Color = color;
}
public Shape Clone()
{
// Derin kopya: Tüm özellikler ayrı ayrı kopyalanır
return new Shape(this.X, this.Y, this.Color);
}
public void Display()
{
Console.WriteLine($"Shape at ({X},{Y}) with color {Color}");
}
}
🧪 Adım 3: Kullanım Örneği
static void Main(string[] args)
{
Shape shape1 = new Shape(10, 20, "Red");
Shape shape2 = shape1.Clone();
shape2.Color = "Blue";
shape2.X = 50;
shape1.Display(); // Shape at (10,20) with color Red
shape2.Display(); // Shape at (50,20) with color Blue
}
Görüldüğü gibi shape2, shape1 nesnesinin bir klonudur ancak bazı özellikleri değiştirilmiştir. Orijinal nesne bu değişiklikten etkilenmemiştir.
📌 Derin Kopya (Deep Copy) vs Yüzeysel Kopya (Shallow Copy)
Prototype Pattern kullanırken dikkat edilmesi gereken noktalardan biri de kopyalamanın derinlik düzeyidir.
- Shallow Copy: Sadece referanslar kopyalanır. İç içe nesneler hala eski nesneyi gösterir.
- Deep Copy: Tüm alanlar ve iç yapılar kopyalanır. Tam bir bağımsız kopyadır.
Aşağıda basit bir shallow vs deep copy karşılaştırması yapılmıştır:
public class Person
{
public string Name { get; set; }
public Address Address { get; set; }
public Person CloneShallow() => (Person)this.MemberwiseClone(); // Yüzeysel kopya
public Person CloneDeep()
{
return new Person
{
Name = this.Name,
Address = new Address { City = this.Address.City }
};
}
}
public class Address
{
public string City { get; set; }
}
📷 Görsel ile Açıklama
Aşağıdaki diagramlar Prototype Pattern’in nasıl çalıştığını görsel olarak açıklamaktadır:
Şekil 1: Klonlama Süreci

💡 Avantajları
- Nesne türetme süresi kısalır.
- Karmaşık nesne konfigürasyonları tekrar kullanılabilir.
- Ortak nesne yapısı korunarak esneklik sağlanır.
⚠️ Dikkat Edilmesi Gerekenler
- Derin kopyalama karmaşık yapılarda zor olabilir.
- Karmaşık bağımlılıklar varsa klonlama hataya neden olabilir.
🎯 Gerçek Hayatta Kullanım Alanları
- Grafik editörlerinde (örnek: bir şekli kopyalayıp yapıştırma)
- Video oyunlarında (örnek: benzer düşman türlerinin çoğaltılması)
- Veri yükleme işlemi çok pahalı olan durumlarda
- State-based yazılımlarda her aşamayı yedeklemek
🤔 Sonuç
Prototype Design Pattern, performans ve esneklik açısından pek çok avantaj sunar. Özellikle büyük ölçekli uygulamalarda nesne çoğaltma olayını hızlandırır ve sadeleştirir. .NET platformunda kolayca uygulanabilir olması ise cabası!
Umarım bu yazı, Prototype Design Pattern’i hem teorik hem pratik olarak tam anlamıyla kavramanızı sağlamıştır. Siz de kendi projelerinizde bu deseni kullanarak daha temiz ve performanslı kodlar yazabilirsiniz.
✅ Uygulamalı Kodu GitHub’da Görüntüleyin
Kod örneklerinin tamamına aşağıdaki bağlantıdan ulaşabilirsiniz:
🔗 GitHub – Prototype Design Pattern in C#
📣 Diğer Yazılarımıza Göz Atın:
- Tasarım Desenleri #1 — Singleton Pattern
- Tasarım Desenleri #2 — Factory Method Pattern
- Tasarım Desenleri #3 — Builder Pattern
📝 Aşağıya yorumlarınızı bırakmayı ve bu içeriği beğendiyseniz paylaşmayı unutmayın! Yeni yazılarda görüşmek üzere 👋
#CSharp #DotNet #DesignPatterns #PrototypePattern #SoftwareArchitecture #YazılımMühendisliği



