Скажите, что у меня есть набор элементов, например List<Item>
, и мне нужно проверить, не изменен ли какой-либо элемент из класса-обертки, например, значение любого свойства элемента изменяется через сеттер:Как обнаружить изменения в объекте?
List<Item> items = itemsWrapper.getItems(); // itemsWrapper contains a list of items
Item anItem = items.get(index);
item.setProperty(property);
itemsWrapper.hasChanged(); // ??????
Я пытаюсь выяснить способ достижения последнего утверждения или что-то подобное.
Я вижу, что есть похожие вопросы, например this one, где используется Hibernate, но ответ очень расплывчатый, и мой вопрос не связан с DB. В нем также упоминается создание списка слушателей, но я не уверен, что его можно было бы сделать.
Или this other question, где выбранный ответ предполагает использование флага dirty
, который необходимо увеличить каждый раз при изменении свойства. Тем не менее, мой класс фактически получил бы грязнее, как ни парадоксально, и мне нужно будет изменить десятки методов, которые изменяют свойства объекта.
Есть ли другой подход, лучше, если он прозрачен?
«Наблюдатель» Выкройка: itemsWrapper наблюдает за предметами для изменения. – Fildor
Можете ли вы дать нам больше информации? Я подозреваю, что вы можете захотеть отслеживать где-то еще изменения, а не сама коллекция. –
@Fildor Я также проверил подход шаблона наблюдателя, но я не вижу, как это отличается от подхода «грязного» флага, поскольку на самом деле «делает мой код более грязным», потому что мне все равно придется обновлять все мои сеттеры (и методы модификации объекта). – dabadaba