Memento 模式和 MVC 模式,发起者状态总是重复的?

Memento Pattern and MVC pattern, originator state will be alway duplicated?

我已经开始通过 Memento Pattern 实现撤消和重做,到目前为止我的进展是:

来自 Class 控制器,函数 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);
}

无效 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));
}

我的问题是: 每次我按下 "undo" btn,因为它会更新滑块值,我的 Memento 将在控制器被触发时重新记录,这样我就有了 2 个相等的动量状态。 现在,这还不错,因为我也想实现一个 "redo",所以我的想法是将这个 "duplicate" 推到我的实际状态前面,以便能够去 "back from the undo"。 我怎样才能实现这样的条件? 换一种方式,在其他地方记录我的 Memento States 更好吗?

控制器现在有一个“bool undoing”值来跳过观察者通知。