代码之家  ›  专栏  ›  技术社区  ›  simendsjo

枚举器中使用的这种设计模式是什么。?

  •  0
  • simendsjo  · 技术社区  · 14 年前

    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!
    

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

    但这种模式叫什么?它还有什么用处吗?

    1 回复  |  直到 14 年前
        1
  •  3
  •   Jon Skeet    14 年前

    我什么都不知道 这种模式—您可以称之为“版本快照”或类似的内容,其中重要的一点是,如果您感兴趣的只是知道数据是否已更改,则不需要对整个可变数据进行快照(i、 e.快照只是变得无效,而不是在面对原始快照的更改时保持不变。)