У меня есть Модель, которая содержит разные переменные и список 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 обратно по умолчанию.
Как я могу это сделать?