2010-06-28 87 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