大家知道,Prototype pattern 就是通过copy原型来创建新的对象,其中有shallow copy versus deep copy;shallow copy在COM中就是重用的概念,由组件的reference count控制对象的释放。而deep copy在C++语言中可以简单地理解为拷贝构造函数(当然不仅仅那样)。
   我想和大家讨论讨论deep copy的问题,尤其是在组件中的应用。
   如果原型中引用了其他的对象,在clone时就比较麻烦,内存拷贝好像行不通。如果是简单的原型(没有应用对象或其它复杂情况),memcopy勉强行得通。但是,现实并不是这样,怎样理想的实现deep copy,并且在组件形式中实现(二进制级别)?

解决方案 »

  1.   

    如果在每个对象中都实现clone方法(对象拷贝),那么在subclass或者对象引用中处理deep copy可能相对容易一点;java和新的.net中可以初见端倪
      

  2.   

    意见同上,
    对于对象调用clone,
      

  3.   

    在c#中看到这样一段代码
    private CEmpData CreateDeepCopy()
                      {
                      CEmpData objEmpCopy;
                      Stream objStream;
                      BinaryFormatter objBinFormatter = new BinaryFormatter();
                      try
                      {
                      objStream = File.Open("Empdata.bin", FileMode.Create);
                      objBinFormatter.Serialize(objStream, this);
                      objStream.Close();
                      objStream = File.Open("Empdata.bin", FileMode.Open);
                      objEmpCopy = (CEmpData)objBinFormatter.Deserialize(objStream);
                      objStream.Close();
                      return objEmpCopy;
                      }
                      catch(Exception ex)
                      {
                      Console.WriteLine (ex.ToString());
                      return null;
                      }
                      }
    -----------------------------------------------------
    上面的CEmpData 类实现了deep copy
    看样子是把类保存为二进制文件了
    大家对这样的方法有何褒贬?