Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Java программирование > Общие вопросы по Java, Java SE, Kotlin
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.07.2010, 23:15   #1
G-Cat
 
Регистрация: 27.02.2010
Сообщений: 4
По умолчанию UNDO\REDO

Дорогие формучане, подскажите, пожалуйста, как реализовать функцию UNDO\REDO (отмена\возврат действия). Мы с другом делаем простенький графический редактор, где фигуры хранятся в отдельном векторе и нам необходим данный функционал. Только, прошу, не посылайте сразу к паттерну Commands, он мне мало понятен, если есть возможность, то хотелось бы что бы его значение было объяснено на простеньком примере (тип, есть абстрактный класс А, есть его наследники-команды Б, В и Г...и т.д.). Или приведите статью где данный подход довольно просто разжёван. Или выложите свои\чужие исходники с применением данного паттерна, а можно и свои собственные пути решения.
Буду примного и искренне благодарен за любую оказанную помощь. Спасибо за внимание.
G-Cat вне форума Ответить с цитированием
Старый 14.07.2010, 02:18   #2
G-Cat
 
Регистрация: 27.02.2010
Сообщений: 4
По умолчанию

вроде начал разбираться в паттерне Command. Вот набросал код-макет:



Код:
interface Command {
  void execute();
  void unexecute();
}

class AddNewShape implements Command {

  Shape newShape;

  AddNewShape(Shape ob) {
    newShape = ob;
  }

  public void execute() {
    System.out.println(newShape.name + " shape is done.");
  }

  public void unexecute() {
    System.out.println(newShape.name + " is deleted.");
    newShape = null;
  }
}

class Resize implements Command {
  Shape current;
  Shape previous;

  Resize(Shape ob) {
    previous = new Shape();
    //String nm = ob.name;
    previous.name = ob.name;
    current = ob;
  }

  public void execute() {
    current.name = "Strange";
    System.out.println("Old name: " + previous.name);
    System.out.println("New name: " + current.name);
  }

  public void unexecute() {
    current = previous;
    System.out.println("Now, current name is: " + current.name);
  }
}

class Shape {
  public String name;

  Shape(){}

  Shape(String str) {
    name = str;
  }
}

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

    Shape object = new Shape("Simple");

    Command shape = new AddNewShape(object);

    System.out.println("Creating shape:");
    shape.execute();
    shape = new Resize(object);

    System.out.println("Resizing shape:");
    shape.execute();

    System.out.println("Undo resizing shape:");
    shape.unexecute();
    shape = new AddNewShape(object);
    
    System.out.println("Deleting shape:");
    shape.unexecute();
  }
}


Только по моей идеи он должен выводить следующие данные:

Код:
Creating shape:
Simple shape is done.
Resizing shape:
Old name: Simple
New name: Strange
Undo resizing shape:
Now, current name is: Simple
Deleting shape:
Simple is deleted.
Но, почему то, упорно выводит всё тоже самое, только в конце удаляет не Simple, а Strange...помогите понять причину.

Последний раз редактировалось alexinspir; 14.07.2010 в 07:25.
G-Cat вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Доступность пункта Undo/Redo Ser11 Общие вопросы Delphi 17 11.08.2009 17:56
реализация Undo и Redo Bayazet Общие вопросы Delphi 5 03.03.2009 15:48
Undo на форме yulia Общие вопросы Delphi 1 16.11.2008 17:22
Undo-Redo NeiL Общие вопросы Delphi 8 14.03.2008 19:04
Undo, Redo Xardas Общие вопросы Delphi 1 24.01.2008 19:35