gpt4 book ai didi

c++ - 通过制作 'state snapshot' 来构建撤消和重做

转载 作者:搜寻专家 更新时间:2023-10-31 01:25:22 25 4
gpt4 key购买 nike

我想为图像编辑器构建一个 Undo&Redo 类,而不构建整个命令模式。

实际上,在我的代码中,我使用的是 MVC 模式,所以每次我启动一个操作时,我都会得到一堆更新的属性:

    class model{
...code...

public:
bool is_Flipped_V = false;
bool is_Flipped_H = false;
bool is_Rotated = false;
bool is_Blurred = false;
bool is_Sharpened = false;
bool is_Grayscale = false;
bool is_Sepia = false;
bool is_Loaded = false;
bool is_Saved = false;


int exposure_Val;
double contrast_Val;
int red_Val;
int green_Val;
int blue_Val;

int hue_Val;
int saturation_Val;
int luminance_Val;

int angle_Val;
}

我的想法是创建一个列表,每次通知Observer时,它记录所有上层属性的实际状态。这样,当我想“撤消”某些操作时,我可以通过传递先前的属性状态来重新更新我的图像。

有人做过类似的事情吗?如何将属性的状态保存在列表中?有没有不同但更好的方法来实现它?

最佳答案

实现撤消/重做的首选方法是遵循 Memento Pattern .它存储每个不可撤销的操作,并允许跳转到历史上的任何随机点。这是一个简单干净的模式,有助于实现此功能。

Memento 模式使用三个角色类。 Memento包含要恢复的对象的实际状态。 OriginatorMemento 中创建和存储状态对象和 Caretaker object 负责从 Memento 的集合中恢复对象的状态对象。

关于c++ - 通过制作 'state snapshot' 来构建撤消和重做,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56968716/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com