Yukarı Çık

Memento Tasarım Deseni

21 Mayıs 2022   0 Yorum

Memento tasarım deseni behavioral(davranışsal) tasarım kalıbı grubundadır.

Geri alma işleminin gerçekleşmesidir. Örnek olarak Word programında yaptığımız işlemlerin tek tek geri alınması işlemidir.

Memento, bir nesnenin durumunu önceki bir duruma geri yüklemek için kullanılır.

Encapsulation'ı bozmadan bir objeyi daha önceki durumuna geri döndürmektir.

 

 

Originator, durum bilgisi korunarak gerektiğinde önceki duruma geri döndürülmek istenilen nesnelere denir. Eski ve yeni halini tutan metotlar içerir.

Memento,geri yüklenecek bir nesnenin durumunu içerir. Orijinal nesnemizin istediğimiz(bazı)  alanlarını tutar.

Caretaker, geri dönüş adımlarımızı yani birden fazla adımları memento cinsinden tutar.

Memento sınıfı:

public class Memento {
    private String state;

    public Memento(String state){
        this.state = state;
    }

    public String getState(){
        return state;

    }
}

Originator sınıfı:

public class Originator {
    private String state;
    public void setState(String state){
        this.state = state;
    }

    public String getState(){
        return state;
    }

    public Memento saveStateToMemento(){
        return new Memento(state);
    }

    public void getStateFromMemento(Memento Memento){
        state = Memento.getState();
    }
}

CareTaker sınıfı:

public class CareTaker {
    private List<Memento> mementoList = new ArrayList<Memento>();


    public void add(Memento state){
        mementoList.add(state);
    }

    public Memento get(int index){
        return mementoList.get(index);
    }
}

Ana class:

public class MementePattern {
    public static void main(String[] args) {

        Originator originator = new Originator();
        CareTaker careTaker = new CareTaker();

        originator.setState("State 1"); //state imizi oluşturduk
        careTaker.add(originator.saveStateToMemento()); //state imizi kaydettik

        originator.setState("State 2"); //state imizi oluşturduk
        careTaker.add(originator.saveStateToMemento());//state imizi kaydettik

        System.out.println("Geçerli State: " + originator.getState()); //originator.getState() methodundan en sonuncu state i yazdırdık.

        originator.getStateFromMemento(careTaker.get(0));//ilk state i aldık
        System.out.println("1.kayıtlı  State: " + originator.getState());
        originator.getStateFromMemento(careTaker.get(1)); //ikinci state i aldık
        System.out.println("2.kayıtlı  State: " + originator.getState());
    }
}

Program çıktısı:


0 Yorum