@Alex_BC

Как можно сделать откат и повтор OOP?

echo $calculate->init(20).
    ->compute('+', 2)
    ->replay();
    ->undo();
    ->getResult();


каким образом можно реализовать откат и повтор метода в OOP?
  • Вопрос задан
  • 118 просмотров
Решения вопроса 1
@vabka
Токсичный
В таком виде можно реализовать это при помощи стека.
В самом начале кладёте в поле началное значение
При вызове compute - кладёте в стек операцию и значение
При вызове replay - кладёте в стек операцию и значение с верхушки стека
При вызове undo - убираете пару с верхушки тека
При вызове getResult - применяете все операции к сохранённому начальному значению
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
SilenceOfWinter
@SilenceOfWinter
та еще зажигалка...
откат с какого метода до какого? проще всего хранить собственный клон и в случае отката вернуть его.
Ответ написан
@rPman
2 основных подхода к реализации отката:
1. вместо вычислений, на каждом шаге просто добавляете или удаляете описание операций (иногда подойдут обычные замыкания) в специальный массив, реальные вычисления проводите в момент когда запрашивается результат
2. каждый шаг вычислений сохраняет предыдущее значение в специальном массиве, соответственно откат - это получение этого значения и удаление последнего элемента в масссиве (если не нужен redo)

Оба подхода имеют свои плюсы и минусы, для простого калькулятора удобнее второй подход, а вот редактора сложного документа - первый.

Так же возможно сочетание обоих подходов, для оптимизации ресурсов.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
03 мар. 2021, в 12:16
2000 руб./за проект
03 мар. 2021, в 12:14
15000 руб./за проект
03 мар. 2021, в 12:13
1200 руб./в час