Java Лучший способ вызвать методы с заданной строкой

1

Поэтому я создаю пользовательское меню, и это класс элемента подменю, который обрабатывает правильный метод. В настоящее время я использую оператор switch для имени метода, но это лучший способ сделать это?

Мне понравился бы новый набор глаз, я долго смотрел на этот путь. Благодарю!

import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JLabel;

import com.as.devcenter.Util;

public class MenuSubItem extends JLabel implements MouseListener {

    private static final long serialVersionUID = 1L;

    private String action = "";

    public MenuSubItem(String label, String action, Class<?> className) {
    addMouseListener(this);

    this.action = action;

    setText(label);
    setName(action);
    setSize(Util.widthOfText(getText(), Util.getDefaultFont()) + 4, 22);
    }

    /*
     * Start Mouse Events
     */

    @Override
    public void mouseClicked(MouseEvent e) {
    Util.log("MenuSubItem clicked");
    if (action.equalsIgnoreCase("")) {
        Util.log("No action was provided for MenuSubItem: " + getText());
    } else {
        try {
        Method method = Actions.class.getDeclaredMethod(action, className);

        switch (method.getName()) {
        case "newProject":
            NewProjectFrame npf = new NewProjectFrame();
            method.invoke(npf, npf);
            break;
        case "openConsole":
            Console console = new Console();
            method.invoke(console, console);
            break;
        }
        } catch (NoSuchMethodException | SecurityException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e1) {
        if (e1 instanceof NoSuchMethodException) {
            Util.log("Could not identify action: " + action);
        } else {
            e1.printStackTrace();
        }
        }

    }
    }

    public void mousePressed(MouseEvent e) {
    }

    public void mouseReleased(MouseEvent e) {
    }

    public void mouseEntered(MouseEvent e) {
    }

    public void mouseExited(MouseEvent e) {
    }
}

Класс действий (просто есть 2 метода atm, но будет больше)

public class Actions {

    public static void newProject(NewProjectFrame npf){
        npf.setup();
        Util.getProgram().items[0].clear();
    }

    public static void openConsole(Console console){
    console.setup();
    Util.getProgram().items[0].clear();
    }
}
Теги:
switch-statement
menu

1 ответ

1
Лучший ответ

Используйте шаблон команды:

В объектно-ориентированном программировании шаблон команды представляет собой поведенческий шаблон проектирования, в котором объект используется для представления и инкапсуляции всей информации, необходимой для вызова метода позднее. Эта информация включает имя метода, объект, которому принадлежит метод и значения для параметров метода.

С http://en.wikipedia.org/wiki/Command_pattern

Этот пример очень похож на вашу проблему:

http://alvinalexander.com/java/java-command-design-pattern-in-java-examples

  • 0
    Хорошо, я попробую! Спасибо =)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню