Какой объектно-ориентированный дизайн GUI будет правильно сочетать шаблоны Command и Observer? - PullRequest
0 голосов
/ 14 февраля 2011

Существует ли объектно-ориентированный дизайн графического интерфейса, который был бы разумным сочетанием шаблонов 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 полезным партнером для него?

1 Ответ

1 голос
/ 14 февраля 2011

Ну, в общем, дизайнерским решением для пользовательского интерфейса будет MVC или некоторые его вариации (на самом деле люди обычно не используют явный контроллер и имеют модель и представление, которые в основном связаны с контроллером).Команды здесь не обязательны, если только вы не хотите установить структуру отмены.

В любом случае, если вы используете Java, вы, вероятно, застряли с библиотекой пользовательского интерфейса (например, Swing или SWT) и этой библиотекой.будет навязывать большую часть вашего дизайна.

...