@Test public void BasicExecuteTest() { ModifySettableItemAction action = new ModifySettableItemAction(item, "New"); invoker.execute(action); assertEquals("New", item.getString()); }
public String execute(Action action) { action.execute(); undoStack.push(action); redoStack.clear(); listeners.forEach(listener -> listener.onActionExecuted(action)); return action.getExecuteText(); }
ActionInvoker { public String execute(Action action) { action.execute(); undoStack.push(action); redoStack.clear(); listeners.forEach(listener -> listener.onActionExecuted(action)); return action.getExecuteText(); } }
ActionInvoker { public String execute(Action action) { action.execute(); undoStack.push(action); redoStack.clear(); listeners.forEach(listener -> listener.onActionExecuted(action)); return action.getExecuteText(); }  }
ActionInvoker { public String execute(Action action) { action.execute(); undoStack.push(action); redoStack.clear(); listeners.forEach(listener -> listener.onActionExecuted(action)); return action.getExecuteText(); }  String undo(); String redo(); String execute(Action action); boolean canUndo(); boolean canRedo(); Action nextUndo(); Action nextRedo(); void registerActionOccuredListener(ActionOccurredListener listener); void unregisterActionOccuredListener(ActionOccurredListener listener); }
ActionInvoker { public String execute(Action action) { action.execute(); undoStack.push(action); redoStack.clear(); listeners.forEach(listener -> listener.onActionExecuted(action)); return action.getExecuteText(); }  String undo(); String redo(); String execute(Action action); boolean canUndo(); boolean canRedo(); Action nextUndo(); Action nextRedo(); void registerActionOccuredListener(ActionOccurredListener listener); void unregisterActionOccuredListener(ActionOccurredListener listener);  }