Jér*_*ôme 9 language-agnostic design-patterns undo
我正在尝试使用命令模式在我的应用程序中实现撤消/重做功能.我遇到了问题.
为了说明它,让我们假设您可以使用我的应用程序创建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% |
+--------------*
Run Code Online (Sandbox Code Playgroud)
删除配置文件时,也会自动删除构建在此配置文件上的所有3D部件(当要删除配置文件时,将通知3D部件管理器并删除过时的3D部件.还会通知视图以更新GUI).
这是我遇到问题的地方:我正在编写用于删除2D配置文件的undo/redo命令,它看起来像这样(伪代码):
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
}
Run Code Online (Sandbox Code Playgroud)
正如您在上面的代码中看到的,删除2D配置文件将自动删除依赖于删除的配置文件的所有3D部件.
但是在进行撤消时,将2D轮廓重新添加到列表是不够的:3D零件丢失了.
我该怎么办 ?undo/redo命令是否应该负责删除3D部件(这是3d部件管理员实际完成的事情)?这意味着undo/redo命令也将负责通知视图以更新GUI.
或者undo/redo命令是否应创建将删除的所有3d部件的内部副本,并让3d部件管理器删除3D部件?
还是有另一个更好的解决方案?
谢谢你的帮助 !
| 归档时间: |
|
| 查看次数: |
623 次 |
| 最近记录: |