Programlamada Tasarım Desenleri #16 — Memento Design Pattern (dotnet c#)
Programlamada Tasarım Desenleri #16 — Memento Design Pattern (C# .NET ile Örnekli Anlatım)
Merhaba yazılım sevdalıları! 👨💻👩💻 Bu yazı dizimizin 16. bölümünde, yazılım mimarisinin en güçlü araçlarından biri olan Memento Design Pattern (Hatıra Tasarım Deseni)‘ni ele alacağız. Özellikle .NET platformunda (C#) geliştirilen uygulamalarda nasıl kullanılabileceğini gerçek dünya örnekleriyle birlikte açıklayacağız.
Hem geçmişe göz atmayı sevenler, hem de undo/redo gibi özellikleri projelerine kazandırmak isteyenler için harika bir desen sizi bekliyor! 😊

📌 Memento Design Pattern Nedir?
Memento Design Pattern, bir nesnenin önceki durumunu kaydedip daha sonra bu duruma dönebilmemizi sağlayan bir davranışsal (behavioral) tasarım desenidir. Bu desen, genellikle “undo / redo” (geri al / yinele) gibi işlemlerde kullanılır.
🎯 Amaç:
Bir nesnenin iç durumunu (state) dış dünyadan gizleyerek, onu daha sonra geri yükleyebilmek amacıyla saklamaktır.
👥 Desende Rol Alan Sınıflar
- Originator: Durumu oluşturan ve değiştiren nesne
- Memento: Durumun saklandığı nesne (genellikle sadece orijinatör erişebilir)
- Caretaker: Durumu gerektiğinde saklayan ve geri yükleyen nesne
🧠 Ne Zaman Kullanılmalı?
- Kullanıcılara geri alma (undo) imkanı sağlamak istediğinizde
- Nesnelerin önceki durumlarına dönüş yapılmasını istediğiniz durumlarda
- Durum yönetimi uygulamalarında (ör. text editor gibi)
🧪 Memento Design Pattern – C# ile Kod Örneği
.NET uygulamalarında bu deseni uygulamak oldukça kolaydır. Şimdi birlikte bir örnek üzerinden adım adım ilerleyelim.
⚙️ Senaryo: Basit Bir Metin Editörü
Kullanıcı metin yazıyor. Her değişiklikte metnin son hali saklanıyor ve kullanıcı istediğinde geri alabiliyor.
📁 1. Memento.cs
public class TextMemento { public string State { get; } public TextMemento(string state) { State = state; } }
📁 2. Originator.cs
public class TextEditor { private string _text; public void SetText(string text) { _text = text; Console.WriteLine("Metin Güncellendi: " + _text); } public string GetText() { return _text; } public TextMemento Save() { return new TextMemento(_text); } public void Restore(TextMemento memento) { _text = memento.State; Console.WriteLine("Metin Geri Yüklendi: " + _text); } }
📁 3. Caretaker.cs
public class TextHistory { private Stack
📁 4. Program.cs
class Program { static void Main(string[] args) { TextEditor editor = new TextEditor(); TextHistory history = new TextHistory(); editor.SetText("İlk Cümle"); history.Save(editor.Save()); editor.SetText("İkinci Cümle"); history.Save(editor.Save()); editor.SetText("Üçüncü Cümle"); editor.Restore(history.Undo()); editor.Restore(history.Undo()); } }
🖼️ Örnek Çıktı
Metin Güncellendi: İlk Cümle Metin Güncellendi: İkinci Cümle Metin Güncellendi: Üçüncü Cümle Metin Geri Yüklendi: İkinci Cümle Metin Geri Yüklendi: İlk Cümle
📈 SEO Odaklı Anahtar Kelimeler
- Memento Design Pattern Nedir
- C# Tasarım Desenleri
- .NET Undo/Redo işlemi
- Behavioral Design Patterns
- Yazılımda Geri Alma İşlemi
- C# ile Design Pattern Uygulaması
- Memento Pattern C# Örneği
🧩 Gerçek Hayattan Kullanım Alanları
- Word veya Notepad gibi metin düzenleyicileri
- Grafik tasarım araçları (Photoshop, Figma)
- Form verisi geri alma işlemleri
- Oyunlarda karakter durum kaydetme/load etme fonksiyonları
🛠️ İpuçları ve Dikkat Edilmesi Gerekenler
- Kaydettiğiniz durumlar (memento nesneleri) bellekte yer kaplayabilir.
- Gereksiz yere çok fazla kayıt yapılması performans kaybına neden olabilir.
- Originator nesnesi dış dünya ile Memento nesnesi arasındaki iletişimi iyi kapsüllemelidir (encapsulation).
🔚 Sonuç
Memento Design Pattern, özellikle kullanıcı odaklı uygulamalarda çok kritik bir yer tutar. C# ve .NET platformlarında bu deseni etkin şekilde kullanarak uygulamalarınıza gelişmiş özellikler kazandırabilirsiniz.
💡 Bir ipucu: Bu deseni diğer tasarım desenleriyle birleştirerek çok daha güçlü mimariler kurabilirsiniz. Özellikle Command Pattern ile birlikte kullanımı oldukça yaygındır.
📸 Bonus: Memento Pattern UML Diyagramı
*Kaynak: refactoring.guru*
🗣️ Sizin Fikriniz?
Siz bu deseni daha önce kullandınız mı? Hangi senaryolarda işinize yaradı? Yorumlarda paylaşmayı unutmayın! 👇
🔔 Yeni tasarım desenleri ve yazılım mimarileri hakkında güncellemeler almak için bloguma abone olun!
📚 Bir sonraki yazımızda: Observer Design Pattern bizlerle olacak. Takipte kalın!
📌 Etiketler:
#designpatterns #csharp #dotnet #memento #undo #softwarearchitecture #backend #tasarım desenleri
Umarım bu yazı, Memento Design Pattern’ı anlamanızı ve projelerinizde uygulamanızı kolaylaştırmıştır. Kolay kodlamalar! 🚀
Hazırlayan: [Adınız]
Tarih: [Güncel Tarih]