Harun Özer


Proje veya dijital katalog yaptırmak için
iletişim formu doldurabilirsiniz..

<< Mediator Tasarım Deseni - Mediator Design Pattern | Observer Tasarım Deseni - Observer Design Pattern>>

Memento Tasarım Deseni - Memento Design Pattern

Yazar harunozer 25 November 2012

Memento Tasarım Deseni - Memento Design Pattern Memento tasarım deseni behavior grubununa ait, bir nesnenin tamamının veya bazı özelliklerinin tutularak sonradan tekrar elde edilmesini yöneten tasarım desenidir. Memento tasarım deseninin dofactory.com a göre kullanım sıklığı 20% civarındadır.

Memento tasarım deseni nesnenin bir halinin kopyasını alıp sonra bu kopyanın tekrar elde edilmesini sağlar. Genelde geri al işlemi için kullanılır. Memento tasarım deseni 3 yapıdan oluşur.

  • Originator: Tamamının veya bazı özelliklerinin kopyasının tutulacağı nesnedir. Memento nesnesini oluşturan ve geri yüklenmesinden sorumludur.
  • Memento: Originator nesnesinin saklanacak özelliklerinin tanımlı olduğu nesne.
  • Caretaker:  Saklanacak olan memento nesnesinin referansını içinde barındıran nesnedir.

Memento tasarım deseninin uml şeması aşağıdaki gibidir.

Örnek bir uygulama yapalım. Uygulamamızda Kisi nesnesi olsun ve bu nesne üzerinde memento tasarım desenini uygulayalım. Uygulamamızın class diyagramı aşağıdaki gibidir.

Örnek uygulamamızın kodları açıklamaları ile beraber aşağıdadır.


//Originator
//Tamamının veya bazı özelliklerinin kopyasının alınacağı sınıf
class Kisi
{
    public string Ad { get; set; }
    public string Soyad { get; set; }
    public int Yas { get; set; }

    public KisiMemento CreateMemento()
    {
        return new KisiMemento {
            Ad = this.Ad
            ,Soyad = this.Soyad
            ,Yas = this.Yas
        };
    }
    public void BindMemento(KisiMemento kisi)
    {
        this.Ad = kisi.Ad;
        this.Soyad = kisi.Soyad;
        this.Yas = kisi.Yas;
    }
}
//Memento
//Originator nesnesinin kopyasının tutulacağı özelliklerin tanımlı olduğu sınıf
class KisiMemento
{
    public string Ad { get; set; }
    public string Soyad { get; set; }
    public int Yas { get; set; }
}
//Caretaker
//kopyası tutulacak Memento sınıfının tutulacağı sınıf
class KisiMemory
{
    public KisiMemento KisiKopya { get; set; }
}
class Program
{
    static void Main(string[] args)
    {
        //bazı özelliklerinin yedeği tutulacak olan Originator sınıfı oluşturuyoruz.
        Kisi k = new Kisi
        {
            Ad = "Ahmet",
            Soyad = "Yılmaz",
            Yas = 95
        };
        Console.WriteLine(k.Ad);
        //Originator sınıfının özelliklerini Memento olarak saklayacak Caretaker sınıfını oluşturuyoruz.
        //Oluşturduğumuz Originator sınıfının özelliklerini Memento cinsinden elde edip saklıyoruz.
        KisiMemory km = new KisiMemory();
        km.KisiKopya = k.CreateMemento();
        //kopyası alındıktan sonra Originator sınıfının özelliğini değiştiriyoruz
        k.Ad = "Mehmet";
        Console.WriteLine(k.Ad);
        //sakladığımız kopyayı Originator sınıfına yükleyip nesneyi eski haline getiriyoruz.
        k.BindMemento(km.KisiKopya);
        Console.WriteLine(k.Ad);
        Console.ReadKey();
    }
}
 
Örnek uygulamayı aşağıdaki linkten indirebilirsiniz.

MementoSample.rar

Tam Sayfa
Tags tasarım desenleri,
Kategoriler c#.net, Tasarım Desenleri
İşlemler
Bu Makale 6  Kez Beğenildi.
İsim :    
e-Mail :    
Web Site :  
İmage :  
Güvenlik Kodu :  

Güvenlik Resmi
Resmi Yenile
    
Yorum :  
Tasarım Desenleri ve Mimarileri