В настоящее время я пытаюсь разработать простой блокнот с графическим интерфейсом для повышения своих навыков в ООП.
При разработке я придерживаюсь принципа единой ответственности.
Я разделил приложение на несколько частей по принципу.
// This class runs the whole application
public class Notepad {
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
new NotepadFrame();
}
});
}
}
// This class is responsible for setting up a frame
public class NotepadFrame extends JFrame {
public NotepadFrame() {
super("Notepad");
MenuBar menuBar = new MenuBar();
setJMenuBar(menuBar.createMenuBar());
pack();
setVisible(true);
}
}
// This class sets up a menu bar
public class MenuBar {
public JMenuBar createMenuBar() {
JMenuBar menuBar = new JMenuBar();
Buttons buttons = new Buttons();
menuBar.add(buttons.createFileMenuItems());
menuBar.add(buttons.createEditMenuItems());
menuBar.add(buttons.createFormatMenuItems());
menuBar.add(buttons.createHelpMenuItems());
return menuBar;
}
}
Есть и другие классы.
Кнопки - этот класс используется для создания кнопок панели меню.
MenuItemActionListeners - этот класс обрабатывает все события, запускаемые кнопками.
Правильно ли я разделил заявку в соответствии с принципом простой ответственности?
Я также хотел бы найти лучшие способы работы со слушателями действий, мышью и т. Д.
До сих пор я использовал один метод actionPerformed (SomeEvent e) для обработки всех событий.
private JButton button;
private JButton button2;
public void actionPerformed(ActionEvent e) {
Object source = e.getSource();
if (source == button) {
} else if (source == button2) {
} // etc.
}
Я понимаю, что это плохой способ обработки слушателей событий. По мере увеличения размера приложения добавление такого количества условных операторов сделает код менее читабельным, а производительность ЦП снизится.
Как вы обрабатываете прослушиватели событий в своих приложениях?
Как бы вы написали прослушиватели событий при разработке огромных и серьезных приложений, таких как MS Office или AutoCAD?