C#

Memento Tasarım Deseni

Herkese merhaba, C# yazılarımıza kaldığımız yerden devam ediyoruz. Bu yazımızda tasarım desenlerinden biri olan memento tasarım desenini anlatacağım. Hadi başlayalım !

Aslında bu tasarım deseni diğer tüm tasarım desenlerinde de olduğu gibi C# diline özgü bir kavram değil, tüm nesne yönelimli programlama dillerinde daha temiz kod yazabilmek için oluşturulmuş ve yazılımcılar tarafından da kabul görmüş yazılı olmayan kurallardır ve nesne yönelimli programlama yapılabilen tüm dillerde uygulanabilmektedir.

Memento Tasarım Deseni Nedir?

Memento tasarım deseni, bir nesnenin durumunu kaydedip geri yüklemek için kullanılır. Bu desen, bir nesnenin içsel durumunu başka bir nesneye aktarır ve durumun daha sonra geri yüklenmesini sağlar. Bu desen, bir nesnenin durumunun tamamen kapatılmasına izin verir, böylece durum dışarıya açık değildir ve nesne durumunu kontrol edebilir.

Ana Bileşenleri

Memento tasarım deseni üç temel bileşenden oluşur:

  • Originator (Oluşturucu): Bu, Memento tasarım deseni kullanılarak kaydedilecek ve geri yüklenecek olan nesne oluşturucusudur.
  • Memento: Bu, bir nesnenin durumunu tutan ve geri yüklenecek olan durum nesnesidir.
  • Caretaker (Bakıcı): Bu, Memento nesnesini oluşturucudan alır ve saklar.

Memento tasarım desenini kullanarak, bir nesnenin durumunu kaydedebilir ve daha sonra gerektiğinde geri yükleyebilirsiniz. Bu desen, bir nesnenin içsel durumunu saklayarak durumunu güvenli bir şekilde yönetmenizi sağlar.

C# İle Uygulanması

Aşağıda, C# kod örnekleriyle birlikte Memento tasarım deseni kullanımını gösteren bir örnek verilmiştir. Bu örnek, bir text editörünün içsel durumunu kaydedip geri yüklemeyi nasıl kullanacağınızı göstermektedir.

TextEditorMemento Sınıfının Oluşturulması

İlk olarak, Memento nesnesini oluşturalım. Bu, text editörünün durumunu tutacak nesnedir.

public class TextEditorMemento
{
    private readonly string _text;

    public TextEditorMemento(string text)
    {
        _text = text;
    }

    public string GetText()
    {
        return _text;
    }
}

TextEditor Sınıfının Oluşturulması

Ardından, text editörünün durumunu yönetecek olan Originator nesnesini oluşturalım.

public class TextEditor
{
    private string _text;

    public void Write(string text)
    {
        _text += text;
    }

    public void Save()
    {
        Console.WriteLine("Saving text: " + _text);
        var memento = new TextEditorMemento(_text);
        Caretaker.Save(memento);
    }

    public void Undo()
    {
        var memento = Caretaker.Pop();
        _text = memento.GetText();
        Console.WriteLine("Undoing text: " + _text);
    }
}

Caretaker Sınıfının Oluşturulması

Son olarak, Memento nesnesini saklayacak olan Caretaker nesnesini oluşturalım.

public static class Caretaker
{
    private static readonly Stack<TextEditorMemento> _mementos = new Stack<TextEditorMemento>();

    public static void Save(TextEditorMemento memento)
    {
        _mementos.Push(memento);
    }

    public static TextEditorMemento Pop()
    {
        return _mementos.Pop();
    }
}

Bu örnekte, TextEditor sınıfı, bir text editörünün temel işlevlerini gerçekleştirir. Write() yöntemi, editörde yazılan metni ekler. Save() yöntemi, editördeki metni kaydeder ve Memento nesnesini oluşturur. Undo() yöntemi, en son kaydedilen durumun geri yüklenmesini sağlar.

Caretaker sınıfı, Memento nesnesini saklayacak olan bir stack veri yapısı kullanır. Save() yöntemi, Memento nesnesini stack’e ekler ve Pop() yöntemi, en son kaydedilen durumu geri döndürür.

Uygulamanın Test Edilmesi

Bu örneği kullanarak, bir text editöründe birkaç işlem gerçekleştirebilirsiniz. Örneğin, şu şekilde kullanabilirsiniz:

var editor = new TextEditor();
editor.Write("Hello, ");
editor.Write("world!");
editor.Save();
editor.Undo(); // undo last write
Console.WriteLine(editor.GetText()); // should print "Hello, "
editor.Undo(); // undo save
Console.WriteLine(editor.GetText()); // should print ""

Sonuç

Bu örnek, Memento tasarım deseninin kullanımını göstermektedir. Text editörünün durumunu kaydetmek ve geri yüklemek için Memento nesnesini kullandık. Bu desen, bir nesnenin durumunu güvenli bir şekilde yönetmek için kullanılabilir ve geri alınabilen işlemler için kullanışlıdır.

Evet interpreter tasarım deseni ve C# ile uygulanması bu şekilde olmakta. Tüm C# yazılarımıza buraya, diğer tasarım deseni yazılarımıza buraya tıklayarak ulaşabilirsiniz. Herkese hayırlı günler.

Skorumuz:
Oy Vermek İçin Tıklayın
[Toplam: 0 Ortalama: 0]

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Başa dön tuşu