2010-06-28 77 views
0

我在Enumerator中见过这种模式。它确保在枚举项目时集合没有被改变。在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! 

我还可以看到,在使用共享资源确保本地副本与资源中的副本相同时,这很有用。

但是这种模式叫什么?还有其他的东西可以用吗?

回答

3

我不知道任何名为模式 - 你可以称之为“版本快照”或类似的东西,其中重要的部分是,你不需要快照整个可变数据如果你感兴趣的是知道它是否改变了。 (即快照简单地变为无效,而不是在面对原始变化时保持不变)。

+0

由于没有其他人回答,现在这种模式被称为“版本快照”:) – simendsjo 2010-06-29 15:01:46