Итератор, который я пишу, должен перебирать все связанные подграфы фиксированного размера другого данного графа.
Поскольку все эти подграфы очень похожи (только незначительные изменения в алгоритме на основе дерева поиска), я не хочу создавать новый объект для возврата при каждом вызове next()
из-за проблем во время выполнения.
Поэтому у меня есть объект subGraph
, который возвращается каждый раз, но изменяется функцией update()
между вызовами next()
, так что объект работает как представление текущего состояния дерева поиска .
Как оптимально написать этот итератор, если я хочу, чтобы subGraph
оставался неизменным до следующего вызова next()
?
Насколько я понимаю, мне нужно будет использовать update()
внутри hasNext()
чтобы узнать, будет ли действительной следующая модификация subGraph
. Но это как побочный эффект изменит то, что вы ранее получили от next()
, а это не то, как hasNext()
должен работать.
Является ли идея итератора, который всегда возвращает один и тот же объект, неудачным выбором дизайна, или я что-то упустил?