使用命令设计模式只是撤消

时间:2015-04-12 21:37:50

标签: java undo

好的,这是我第一次使用任何设计模式,所以请原谅我,但我真的很挣扎这个概念。从我所读到的那里需要有Command接口,通常这将保持public void execute();在我的情况下,我想我只想公开void undo();我的问题是所有其他所需的类。我的程序基本完成,我试图在最后合并这个设计模式以放入撤销功能。它是我用自己的方法定义的LinkedList。以下是一些代码:

public class LinkedList<E> implements Serializable{

/** number of Nodes on the list */
private int count;

/** the first Node in the list */
private Node head;

/** the last Node in the list */
private Node tail;

/**Stack holding commands*/
private Stack<Command> undo = new Stack<Command>();

/** Inserts a given student's data into the database
 * @param student given student data to be inserted into database
 * @return none*/
public void insert(Student student){
    //case where input is null
    if(student.getName() == null || student.getGNumber() == null)
        throw new IllegalArgumentException();
    Node temp = head;
    //case where there is no list
    if(head == null){
        head = new Node(student, null);
        tail = head;
        count = 1;
    }

    //case where top has existing Nodes
    else{
        //brings reference to end of list
        while(temp.getNext() != null)
            temp = temp.getNext();

        temp.setNext(new Node(student, null));
        tail = temp;
        count ++;

    }
}

现在那是接收器类吗?我还需要为每个命令单独一个类吗?我真正想要的只是一个撤销堆栈的命令,每次我调用一个方法,我就把它推到那个堆栈上。对于所有的Command Design Pattern示例,我发现它们都是Light Switch的相同示例,它实际上并不能很好地显示一般需求。

对不起真的很啰嗦,我猜这里是TL; DR问题:

我可以在LinkedList中添加一个Stack,然后在弹出堆栈的LinkedList中添加一个undo方法吗?并在我的每个方法中添加一个push语句?还是我还需要完成命令设计模式的所有步骤和类?

编辑: 经过一番思考后,我意识到要将命令推入我的堆栈,我需要为每个方法提供命令对象,有没有办法将它实现到我的LinkedList类中?

0 个答案:

没有答案