作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用Command Pattern在我的应用程序中实现撤消/重做功能。我遇到了一个问题。
为了说明这一点,让我们假设您可以使用我的应用程序2D配置文件创建(任意数量)。
然后,可以从这些2D轮廓创建具有不同属性(名称,颜色,比例等)的3D零件。
+--------------+ +--------------+ +--------------+
| 2D profile A | | 2D profile B | | 2D profile C |
+--------------+ +--------------+ +--------------+
| | |
| +---------------+ +---------------+
| | 3D Part B | | 3D Part C |
| | Colour : blue | | Colour : grey |
| | Name : bibi | | Name : foo |
| | Scale : 33% | | Scale : 100% |
| +---------------+ +---------------+
+--------------+
| 3D Part A |
| Colour : red |
| Name : aaa |
| Scale : 50% |
+--------------*
virtual void redo()
{
m_pProfileList.remove(m_pProfile); // This will automatically delete all 3D parts relying on the deleted 2D profile
}
virtual void undo()
{
m_pProfileList.add(m_pProfile); // This will add the 2D profile, but the 3D Parts are lost
}
最佳答案
您需要对此稍作改动:Memento pattern。您可以存储完整的对象树的快照,也可以存储每次更改时的所有差异。有了这些连续的更改历史记录,您就可以通过命令前进和后退,直到心中满意为止,而不会丢失相关的对象。
关于language-agnostic - 撤消/重做与级联删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/435761/
我是一名优秀的程序员,十分优秀!