我在Enumerator中看到过这种模式。它确保在枚举项目时没有更改集合。
public class Versioned
{
internal int version = 0;
public void ThisBreaksVersion()
{
version++;
}
}
public class WorksOnVersioned
{
private readonly int version;
private readonly Versioned versioned;
public WorksOnVersioned(Versioned versioned)
{
this.versioned = versioned;
this.version = versioned.version;
}
public void DoWork()
{
if( version != other.version )
throw new Exception(); // Ooop.. Out of sync!
}
}
var v1 = new Versioned();
var w1 = WorksOnVersioned(v1);
w1.DoWork(); // Yup
var v2 = new Versioned();
var w2 = WorksOnVersioned(v2);
v2.ThisBreaksVersion();
w2.DoWork(); // v2 has changed -> exception!
我还可以看到,在使用共享资源确保本地副本与资源中的副本相同时,这非常有用。
但这种模式叫什么?还有什么东西对它有用吗?
答案 0 :(得分:3)
我不知道任何命名的模式 - 您可能将其称为“版本快照”或类似的东西,其中重要的部分是您不需要对整个快照进行快照如果您感兴趣的是可变数据,则知道它是否已经改变。 (即快照只是变得无效,而不是在原始变化面前保持不变。)