Merhaba Java dostları,

Bugün bir davranışsal tasarım şablonu olan memento design pattern hakkında yazmak istedim. Hemen hemen her şablonda olduğu gibi burada da önce kelime anlamına bakıyoruz. Memento kelime anlamı hatıra vb anlamlara gelmektedir. Dolayısıyla şöyle bir mantık yürütebiliriz. Bir sınıfın belli değerlerini başka bir yerde saklamak ve gerektiğinde tekrar yüklemek için kullanılır. Memento design pattern için en belirgin örnek olarak oyunları verebiliriz. Oyunda belirli bir noktaya kadar geldiğimizi ve bu noktada oyunu kaydettiğimizi düşünelim. İlerleyen aşamaları geçemedik ve oyuna yeniden başlamak yerine daha önceden kaydettiğimiz noktaya geri dönmek isteriz. İşte tam da memento design pattern için bir problem.

Memento design pattern için birkaç terime değinmek istiyorum.

Memento: Değerleri kaydedeceğimiz sınıf.

Originator: Değerlerini kaydetmek istediğimiz sınıf.

Caretaker: Memento nesnelerini saklayan ve daha sonra talep etmemiz halinde bize sunan sınıf.

Memento design pattern için önemli bir nokta şudur; bir memento nesnesi oluştuktan sonra içerisinde tuttuğu değerler değiştirilememelidir.

Memento design pattern için örneğimize bakalım.

package anajavatica.pattern.behavioral.memento;public class Game {

private int level = 0;

public int getLevel() {
return level;
}

public void setLevel(int level) {
this.level = level;
}

public LevelMemento saveLevel() {
return new LevelMemento(getLevel());
}

public void loadLevel(LevelMemento memento) {
setLevel(memento.getLevel());
}

public void printLevel() {
System.out.println(“Level: ” + getLevel());
}

}

class LevelMemento {

private int level = 0;

public LevelMemento(int level) {
this.level = level;
}

public int getLevel() {
return level;
}

}

package anajavatica.pattern.behavioral.memento;import java.util.ArrayList;
import java.util.List;

public class LevelCaretaker {

private List mementoList = new ArrayList();

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

public void addLevelMemento(LevelMemento memento) {
mementoList.add(memento);
}

}

package anajavatica.pattern.behavioral.memento;public class MementoMain {

public static void main(String[] args) {
LevelCaretaker caretaker = new LevelCaretaker();
Game game = new Game();

game.printLevel();
game.setLevel(1);
game.printLevel();
game.setLevel(2);
caretaker.addLevelMemento(game.saveLevel());
game.printLevel();

game.setLevel(3);
game.printLevel();
game.setLevel(4);
game.printLevel();
System.out.println(“Failed! Returning first save point…”);

game.loadLevel(caretaker.getLevelMemento(0));
game.printLevel();
}

}

Bol Java’ lı günler dileğiyle… 😀

No responses yet

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.