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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.11.2017, 00:58   #1
yurez_orsha
 
Регистрация: 10.01.2014
Сообщений: 6
По умолчанию Паттерн memento

Здравствуйте. Реализовал паттерн command для команд redo и undo в стеке. Как можно реализовать тоже самое с помощью паттерна memento?
Прилагаю код:
Код:
import java.util.LinkedList;
 
interface Command {
       void undo();
       void redo();
    }
 
 
public class Stack {
       private LinkedList data = new LinkedList();
       private LinkedList undoHistory = new LinkedList();
       private LinkedList redoHistory = new LinkedList();
 
 
       public void push(int i) {
          this.data.addLast(Integer.valueOf(i));
          this.undoHistory.addLast(new PushCommand(this, i));
          this.redoHistory.clear();
       }
 
       public void pop() {
          this.undoHistory.addLast(new PopCommand(this, this.getLast()));
          this.data.removeLast();
          this.redoHistory.clear();
       }
 
       public int getLast() {
          return ((Integer)this.data.getLast()).intValue();
       }
 
       public boolean empty() {
          return this.data.isEmpty();
       }
 
       public void undo() {
          if(!this.undoHistory.isEmpty()) {
             Command var1 = (Command)this.undoHistory.removeLast();
             var1.undo();
             this.redoHistory.addLast(var1);
          }
       }
 
       public void redo() {
          if(!this.redoHistory.isEmpty()) {
             Command c = (Command)this.redoHistory.removeLast();
             c.redo();
             this.undoHistory.addLast(c);
          }
       }
 
       void print(){
           System.out.println(this.getData(this));
       }
       static LinkedList getData(Stack s) {
          return s.data;
       }
 
}
 
 
class PopCommand implements Command {
 
       private int data;
       Stack s;
 
       public PopCommand(Stack s, int data) {
          this.s = s;
          this.data = data;
       }
 
       public void undo() {
          Stack.getData(this.s).addLast(Integer.valueOf(this.data));
       }
 
       public void redo() {
          Stack.getData(this.s).removeLast();
       }
}
 
class PushCommand implements Command {
 
       private int data;
       Stack s;
 
 
       public PushCommand(Stack s, int data) {
          this.s = s;
          this.data = data;
       }
 
       public void undo() {
          Stack.getData(this.s).removeLast();
       }
 
       public void redo() {
          Stack.getData(this.s).addLast(Integer.valueOf(this.data));
       }
    }
Код:
public class Main {
 
    public static void main(String[] args) {
    
        Stack stack = new Stack();
        stack.push(1);
        stack.push(2);
        stack.push(3);
        stack.print();
        stack.undo();
        stack.print();
        stack.redo();
        stack.print();
        stack.undo();
        stack.undo();
        stack.print();
        stack.redo();
        stack.redo();
        stack.redo();
        stack.print();
    }
 
}
yurez_orsha вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Паттерн alexey_kip Общие вопросы по программированию, компьютерный форум 0 25.12.2015 20:10
Паттерн Registry SoftKoc PHP 4 27.07.2013 01:07
Паттерн Начинающий програм Помощь студентам 0 20.05.2013 19:41
паттерн singleton zhenya.ya Общие вопросы C/C++ 1 26.11.2010 03:11
Паттерн MVP Vistar Общие вопросы .NET 0 11.09.2010 18:45