У меня проблема с одновременным использованием памяти и шаблона команды. Я полностью понимаю, что шаблон памяти используется для сохранения состояния моего объекта при выполнении до выполнения изменения объекта, чтобы я мог вернуться к исходному объекту в неисполнение , но шаблон памятки всегда сохраняет одну и ту же ссылку на объект, когда я устанавливаю его состояние в памятке, нужно ли клонировать объект перед созданием памятки и его настройкой?
Вот что у меня есть:
public class Memento
{
MyObject myObject;
public MyObject getState()
{
return myObject;
}
public void setState(MyObject myObject)
{
this.myObject = myObject;
}
}
Команда:
public class ZoomCommand extends Command
{
Image image;
Memento memento
public InsertCharacterCommand(Image image)
{
//instantiate
this.image = image;
}
@Override public void execute()
{
//create Memento before executing
memento = new Memento();
// set the initial zoom level of the image before executing
memento.setState(image);
//set new state
image.zoomIn(image.getZoom() + 1);
}
@Override public void unExecute()
{
// redo go back to initial state of image before zoom, but image has the same zoom level
this.image = memento.getState();
}
}
Изображение имеет такой же уровень масштабирования и в unExecute. Как это исправить?