Java MVC InvalidationListener - PullRequest
       25

Java MVC InvalidationListener

0 голосов
/ 23 марта 2020

У меня есть Модель, которая содержит разные переменные и список InvalidationListeners. Когда что-то меняется, я вызываю fireInvalidationEvent (), который является методом, который вызывает invalidated (this) для каждого слушателя.

Однако у меня возникают проблемы с этим из-за того, что функция invalidated слишком общая, в случае, например, изменения pageNumber, контроллеру, который слушает эту модель, нужно только изменить TableView, но больше ничего. Ниже у вас есть мой текущий код:

public class DataModel implements Observable {
    // different variables
    private int pageNumber;
    private List<InvalidationListener> listeners = new ArrayList<>();

    // code to override Observable methods (add and remove listeners) and getters and setters for variable
    // setters call fireInvalidationEvent() when variable has changed

    private void fireInvalidationEvent(){
        for (InvalidationListener listener : listeners){
            listener.invalidated(this);
        }
    }
}

public class Controller implements InvalidationListener {
   // Specific code for controller
   @Override
   public void invalidated(Observable obs){
      // do something with values of model
      // do something else if only pageNumber has changed!
   }
}

Этот код работает, но делает слишком много, он делает то же самое для каждого изменения. Он должен делать что-то еще, если only pageNumber изменился, только жирным, потому что изменение некоторых переменных также возвращает pageNumber обратно по умолчанию.

Как я могу это сделать?

...