У меня возникли проблемы с моей моделью MVC в Java.
Я передаю объектный выигрыш методу addModal, чтобы я мог взять любое окно или в основном любое действие в моем контекстном меню и обработать его в своем методе handelAction. Тем не менее, я знаю, что это не лучший способ передавать объекты с тех пор, как мы работаем со всей Java, поэтому мой вопрос:
Могу ли я создать какой-нибудь абстрактный класс-обертку, который может быть использован вместо Object?
Обратите внимание, что все мои представления расширяют AbstractView, и поэтому я не могу просто расширить эти представления, и второе, на что следует обратить внимание, это то, что я не могу просто передать AbstractView, поскольку он не всегда будет представлением, которое я хочу показать когда действие происходит.
Не вдаваясь в подробности, вот тестовый код, который у меня есть на данный момент:
public void addModal(Action action, Object win, ACTION_CONTEXT_MENU menuSelection){
switch(menuSelection){
case SINGLE:
singleActions.put(action, win);
print("singleActions added");
break;
case MULTI:
multiActions.put(action, win);
print("multiActions added");
break;
default:
singleActions.put(action, win);
multiActions.put(action, win);
print("defaultActions added");
break;
}
}
public void handleAction(Action action, Object sender, Object target) {
if(view.getSelectedRows().size() > 1){
if(multiActions.get(action) instanceof ModalWindowView){
print("multi we have an instance of modalwindowview");
((ModalWindowView) multiActions.get(action)).showWindow();
}else{
view.getTable().setEditable(true);
}
}else{
if(singleActions.get(action) instanceof ModalWindowView){
print("single we have an instance of modalwindowview");
((ModalWindowView) singleActions.get(action)).showWindow();
}else{
view.getTable().setEditable(true);
}
}
}
public class TestEditTableCrap extends VerticalLayout{
public TestEditTableCrap(Container container){
EditTableModel model = new EditTableModel();
EditTableController controller = new EditTableController();
EditTableView editTableView = (EditTableView)controller.requestView(model);//this returns an EditTableView
editTableView.registerEventListener(controller);
//editTableView.addActionHandler(controller);
//editTableView.addShortcutListener(controller.getExtendedShortcutListener("enter", KeyCode.ENTER));
editTableView.setContainerDataSource(container);
RegistryIdEditTable registryIdTable;
ContactView view = null;
addComponent(editTableView.getTable());
ModalWindowModel winModelNew = new ModalWindowModel(MODAL_SETTINGS.NEW_MODAL_WINDOW);
ModalWindowModel winModelEdit = new ModalWindowModel(MODAL_SETTINGS.EDIT_MODAL_WINDOW);
ModalWindowModel winModelDelete = new ModalWindowModel(MODAL_SETTINGS.DELETE_MODAL_WINDOW);
ModalWindowController winController = new ModalWindowController();
ModalWindowController winController2 = new ModalWindowController();
ModalWindowController winController3 = new ModalWindowController();
ModalWindowView winViewNew = (ModalWindowView)winController.requestView(winModelNew);
ModalWindowView winViewEdit = (ModalWindowView)winController2.requestView(winModelEdit);
ModalWindowView winViewDelete = (ModalWindowView)winController3.requestView(winModelDelete);
controller.addModal(new Action("New"), winViewNew, ACTION_CONTEXT_MENU.ALL);
controller.addModal(new Action("Modify all selections"), winViewEdit, ACTION_CONTEXT_MENU.MULTI);
controller.addModal(new Action("Delete"), winViewDelete, ACTION_CONTEXT_MENU.ALL);
}
}
Последующие вопросы: есть ли образец для такого рода вещей? Обтекание классов, которые уже расширяют другие абстрактные классы в новом абстрактном классе?