@Alex_BC

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

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


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

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

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

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

Похожие вопросы