У меня есть этот поток данных, примерно:
DataGenerator -> DataFormatter -> UI
DataGenerator - это то, что генерирует данные быстро;DataFormatter - это то, что форматирует его для целей отображения;а пользовательский интерфейс - это просто набор элементов Swing.
Я бы хотел сделать мой DataGenerator примерно таким:
class DataGenerator
{
final private PropertyChangeSupport pcs;
...
public void addPropertyChangeListener(PropertyChangeListener pcl) {
this.pcs.addPropertyChangeListener(pcl);
}
public void removePropertyChangeListener(PropertyChangeListener pcl) {
this.pcs.removePropertyChangeListener(pcl);
}
}
и просто вызывать this.pcs.firePropertyChange(...)
всякий раз, когда в моем генераторе данных появляются новыеданные;тогда я могу просто сделать dataGenerator.addPropertyListener(listener)
, где listener
отвечает за передачу изменений в DataFormatter, а затем в пользовательский интерфейс.
Проблема этого подхода заключается в том, что в секунду происходят тысячи изменений DataGenerator.(от 10000 до 60000 в секунду в зависимости от моей ситуации), и вычислительные затраты на его форматирование для пользовательского интерфейса достаточно высоки, что создает ненужную нагрузку на мой процессор;на самом деле все, что меня беспокоит визуально, - это максимум 10-20 изменений в секунду.
Можно ли использовать подобный подход, но объединить события изменений, прежде чем они попадут в DataFormatter?Если я получаю несколько событий обновления по одной теме, я просто хочу отобразить самую последнюю и могу пропустить все предыдущие.