Welcome to My Blog 👋

Java, Spring Framework, Microservices, Docker, Kubernetes, AWS and Others 🚀
Follow Me

Design Pattern - Memento



  May 10, 2019    Labels:,,,,,,,, 

Bilgisayar sistemlerinde geçmişi saklamak bir zorunluluktur. Örneğin kullanıcı işlemlerini yaparken muhtemel olarak bir hata yapacaktır ve yaptığı hatayı geri almak isteyecektir. Yazılım sistemimizde bu olaya çözüm bulmak için nesnelerimizin geçmişini saklamak zorunda kalabiliriz. Bu duruma çözüm getiren kalıp Memento Pattern'ıdır. Bu patern ile nesnemizin bir veya daha fazla geçmiş durumunu saklayarak istenilen zamanlarda bu geçmiş durumları nesneye tekrar yükleyebiliriz.

Uygulama
  • Bu yöntemi kullanacak client sınıflara bir arayüz görevi görecek Originator sınıfımızı yaratırız. Bu sınıf memento nesnelerinin yani geçmiş durumu tutacak nesneleri yönetmekten sorumludur.
  • Nesnemizin geçmiş durumunu saklaması için Memento sınıfını oluştururuz.
  • Birden fazla geçmiş saklamak istiyorsak Caretaker sınıfını oluştururuz. Saklayacağımız memento nesnelerini bu sınıf barındırır.



public class Memento {
     public String durum;
}

public class Originator {
     public String durum;
     
     public Memento save() {
         return new Memento(durum);
     }
     
     public String get(Memento memento) {
         return memento.getDurum();
     }
}

public class Caretaker {
    
    final Deque<EmpMemento> mementos = new ArrayDeque<>();
    public Memento getMemento()
    {
        return mementos.pop();
    }
    public void setMemento(Memento memento)
    {
        mementos.push(memento);
    }
}

public class TEST {
    
    public static void main() {
        Originator originator = new Originator("İlk durumum");
        Caretaker caretaker = new Caretaker();
        caretaker.setMemento(originator.save());
        originator.setDurum("İkinci durumum");
        caretaker.setMemento(originator.save());
        String sonDurum = originator.get(caretaker.getMemento);
    }
}

No comments:

Post a Comment