Шаблон памяти и шаблон MVC, состояние отправителя всегда будет дублироваться? - PullRequest
0 голосов
/ 11 июля 2019

Я начал реализовывать отмену и повтор через шаблон Memento, мой прогресс до сих пор таков:

из Class Controller, функция RGB (...):

void Controller::rgb(int exp, double cont, int r, int g, int b){

    originator->setValue(exp, originator->exposure_Val);
    originator->setValue(cont, originator->contrast_Val);
    originator->setValue(r, originator->red_Val);
    originator->setValue(g, originator->green_Val);
    originator->setValue(b, originator->blue_Val);

    caretaker->setMemento(originator->createMemento());

    RGB_process run(model->src, model->dst, exp, cont, r, g, b);
    run.doProcess();
    model->setValue(exp, cont, r, g, b);
}

void Model :: setValue (...):

....code that sets values...

notify(); //notify observer, and update the view

тогда, на мой взгляд, on_undo_btn (...):

void MainWindow::on_undo_btn_clicked()
{
    controller->originator->restoreToMemento(controller->caretaker->getMemento());

    ui->exposure_slider->setValue(controller->originator->getValue(controller->originator->exposure_Val));
    ui->contrast_slider->setValue(controller->originator->getValue(controller->originator->contrast_Val));
    ui->red_slider->setValue(controller->originator->getValue(controller->originator->red_Val));
    ui->green_slider->setValue(controller->originator->getValue(controller->originator->green_Val));
    ui->blue_slider->setValue(controller->originator->getValue(controller->originator->blue_Val));
}

Моя проблема: каждый раз, когда я нажимаю кнопку «Отменить», поскольку она обновляет значения ползунков, мой Мементо будет перезаписываться при срабатывании контроллера, так что я получил 2 равных состояния своего импульса. Теперь, это совсем не плохо, так как я хотел бы также реализовать «повтор», поэтому я думал, что нужно нажать этот «дубликат» перед моим фактическим состоянием, чтобы иметь возможность вернуться »от отмены ». Как я могу реализовать такое условие? Лучше ли менять подход и записывать мои Memento States везде?

1 Ответ

0 голосов
/ 12 июля 2019

Контроллер теперь получил значения "bool undoing", чтобы пропустить уведомление наблюдателя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...