Существует ли объектно-ориентированный дизайн графического интерфейса, который был бы разумным сочетанием шаблонов Command и Observer?
Мой графический интерфейс Java пытается объединить шаблоны Command и Observer следующим образом:
- клиент является наблюдателем приемника команд (например, экран ввода GUI или диалоговое окно)
- вызывающий является переменной экземпляра клиента
- метод update () клиента получает ввод получателя команды и обновляет вызывающего с помощью соответствующей команды
Что меня не устраивает в этой реализации, так это то, что метод update () содержит огромное количество условных операторов if.
например.
public class Client implements Observer {
InputScreen inputScreen;
Invoker director;
InputScreenCommand inputScreenCommand;
public Client {
inputScreen = new InputScreen();
inputScreen.registerObserver(this);
inputScreenCommand = new InputScreenCommand(inputScreen)
director.setCommand(inputScreenCommand);
director.invoke();
}
public void update(String command) {
if (command.equals("Input Screen 2")) {
inputScreen.removeObserver(this);
// generate new receiver/subject
inputScreen2.registerObserver(this);
// generate new Command
director.setCommand(inputScreen2Command);
director.invoke();
}
// and so on through all the permutations of input from receivers
}
}
Правильный способ использования шаблона Command для эффективной и действенной обработки событий графического интерфейса в настоящее время ускользает от меня. Является ли шаблон Observer полезным партнером для него?