为什么我的变量会更新?

时间:2014-12-09 16:35:00

标签: design-patterns model-view-controller model command state

我正在编写一个使用MVC和命令模式的程序。在我的具体命令类中,我需要存储模型的先前状态,以便我可以实现撤消/重做功能。

我在创建模型时在模型中存储对模型的引用,并存储对我需要保留的状态的引用: this.prevState = model.getState();

为什么命令对象中的数据在模型对象中发生更改时会更新?除非我在命令对象中告诉它,否则如何在模型中存储有关先前状态的数据而不更改?

1 个答案:

答案 0 :(得分:0)

我认为(因为我不知道你使用的是哪种语言)你正在存储一个像镜子一样的引用(像一个指针),你可以看到并修改引用的内容,因为你正在存储一个方向。而一些编程语言这个过程是不可见的(Javascript,Java ......)所以我可以寻找(再次,因为我不知道你使用的是哪种语言)是一种叫做Copy by Copy或Initalization by Copy或者复制构造函数(我来自西班牙所以我不知道确切的翻译),如下所示:

var olderState = new State(stateToSave);

http://en.wikipedia.org/wiki/Object_copy

你必须对整个副本进行编程是很常见的,如果是这种情况,请记住制作构造函数时可以复制原始副本,但其他对象也可能需要复制构造函数。

希望它适合你!