Ответы пользователя по тегу Паттерны проектирования
  • Пример JAVA-приложения с использованием MVC?

    serso
    @serso
    Например:
    class MyView extends JFrame {
        ...
        JButton button = new JButton();
        button.addMouseListener(new MouseAdapter() {
            public void mouseClicked(MouseEvent e) {
                Controller.getInstance().fireEvent(Events.OPEN_WINDOW);
            }
        });
        ...
    }
    


    В контроллере:
    void fireEvent(Event event) {
        for (Listener listener: listeners) {
            listener.onEvent(event);
        }
    }
    


    Сам контроллер может быть event слушателем:

    Controller implements Listener {
    ...
       void onEvent(Event event) {
            if ( event.equals(Events.OPEN_WINDOW) ) {
                // put here code for initializing and opening the window
                // NOTE: new window also can be listener of specific events
            }
        }
    ...
    }
    


    И работа с моделью:
     class MyView extends JFrame {
        ...
        JButton button = new JButton();
        button.addOnTextChangeListener(new TextChangeListener() {
            public void textChanged(TextChange e) {
                Controller.getInstance().fireEvent(new Event(Events.TEXT_CHANGE, e.getNewText()));
            }
        });
        ...
    }   
    
    Controller implements Listener {
    ...
       void onEvent(Event event) {
            if ( event.equals(Events.TEXT_CHANGE) ) {
                // find and update the module
                getTextContainer().setText(event.getData());
            }
        }
    ...
    }
    


    Естественно, TextChangeListener придуман для упрощения понимания, не знаю есть ли такой в Swing'e
    Ответ написан
    9 комментариев
  • Пример JAVA-приложения с использованием MVC?

    serso
    @serso
    Всё просто — контроллер координирует действия. В вашем случае я бы сделал класс который умеет регистрировать слушателей и управлять событиями.

    Окошки с кнопками — это вьюхи. Они регистрируются на некоторые события в контроллере, и сами вызывают контроллер для посылки события.

    Модели в вашем примере — нет. Можно добавить модель, например, объект, который будет храниться в контроллере и содержать текст из первого окна. Этот объект соответственно должен обновляться контроллером по событию окна с текстовым полем, а также текст в окне с текстовым полем должен выставляться из этого объекта контроллером.
    Ответ написан
    3 комментария