好的,这是我第一次使用任何设计模式,所以请原谅我,但我真的很挣扎这个概念。从我所读到的那里需要有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类中?