Memento Design Pattern

Veysel Mutlu
3 min readAug 1, 2022

--

Memento Design Pattern Behavioral tasarım kalıpları grubunda olan bir tasarım desenidir. Kısacası bir nesnenin önceki durumunu kaydetmemizi ve istenildiği takdirde eski haline dönmemizi sağlayan tasarım desenidir.

https://refactoring.guru/

Yukarıdaki UML Diyagramını incelersek eğer;

Originator, CareTaker ve Memento kavramlarını göreceğiz. Şimdi UML eşliğinde bu terimleri açıklayalım.

  • Memento: Saklamak istediğimiz nesnemizin(kopyalanacak nesnenin) tamamını ya da bir kısmını tutan sınıftır.
  • CareTaker: Memento’ların (saklanan nesnelerin) referansının tutulduğu sınıftır. Yani memento referansını barındırmakta ve yapılacak tüm işlemlerin organizasyonunu sağlamaktadır.
  • Originator: Değerleri tutulacak olan ve önceki değerlerine geri dönebilen sınıftır. Üretken olarak ifade edebileceğimiz bu nesne kopyası saklanacak olan nesneyi ifade etmektedir.

Şimdi Memento Design Pattern’i örneklendireceğimiz Flappy Bird oyunun kodlamasına geçebiliriz. Örneği gerçekleyebilmek adına herhangi bir console uygulaması oluşturup başlayabiliriz.

Kopyası alınacak Originator nesnemizi oluşturduk. Sınıfımızın amacı değerleri tutulacak olan ve önceki değerlerine geri dönebilmektir.

Kopyalanacak olan FlappyBird nesnemizin mevcut olan tüm özelliklerini tutacağımızı belirtmiş olduk. Sınıfımızın amacı saklamak istediğimiz değerlerin tanımlanmasıdır.

Şimdide CareTaker nesnemizi oluşturalım.

Bu sınıfımızında amacı memento’ların referansının tutulduğu yerdir.

Artık client gözüyle baktıgımız program.cs sınıfımıza Memento tasarımını uygulattıracak rollerin metodlarını ekleyelim.

Kısacası geriye FlappyBirdMemento dönen Save metodu ile istediğimiz T anındaki nesnemizi yakalıyoruz ve bunu CareTaker nesnesinde Client tarafında tutuyoruz. Client tarafında aynı CareTaker nesnesinde tutmakta olduğumuz Memento nesnesini UndoChanges metodu sayesinde istediğimiz T anında bilgilere sahip nesneye erişmiş oluyoruz.

Yukarıdaki senaryomuzu çalıştıralım ve örnek çıktımızı görelim.

Özetle;

Memento tasarım kalıbı ile varlıkların initial stateleri yani o anki mevcut konumları saklanarak herhangi bir zaman dilimi içerisinde bir önceki hallerine döndürülmek istenen durumlarda kullanabiliriz.

Geldik bir makalenin daha sonuna. Yeni bir makalede görüşmek üzere hoşçakalın.

Sources:

https://buraksenyurt.com/post/Tasarc4b1m-Desenleri-Memento

--

--